问题描述
- 菜鸟OJ, C语言数简单列求和, 感觉测试没错, 但是wrong answer, 求大神指点
-
Description
有一个分数序列:2/1,3/2,5/3,8/5,13/8,21/13... 求出这个数列的前n项之和。Input
多测试用例,每个测试用例一行,每行是一个正整数nOutput
为每个测试用例单独输出一行:该数列的前n项之和。结果均保留小数点后10位。Sample Input
1
2
3Sample Output
2.0000000000
3.50000000005.1666666667
#include
int main(void){
double i, n, j, x, sum, tem, x1, x2, y1, y2, y;
while(scanf("%lf", &n)!=EOF&&n>=0){
x1=2; x2=3; y1=1; y2=2; sum=0;if(n==0) sum=-3.5;
else if(n==1) sum=-1.5;
else if(n==2) sum=0;
else
for(i=1; i<=n-2; i++){
x=x1+x2; x2=x1; x1=x; y=y1+y2; y2=y1; y1=y;
sum=sum+x/y;
}printf("%.10fn", sum+3.5);
}
return 0;
}OJ反馈信息:wrong answer
解决方案
不知道你写的为啥不对,我写了一个,c语言的
struct Node
{
double number;
Node* pNext;
Node()
{
number = 0;
pNext = NULL;
}
};
int main()
{
int n = -1;
Node* pNode = new Node;
Node* pHead = pNode;
Node* pPre = pNode;
while (scanf_s("%d", &n) != EOF)
{
pNode->number = n;
Node* pNext = new Node;
pNode->pNext = pNext;
pPre = pNode;
pNode = pNext;
}
delete pNode;
pPre->pNext = NULL;
pNode = pHead;
double sum = 0.0;
while (pNode->pNext != NULL)
{
double d = pNode->pNext->number / pNode->number;
sum += d;
printf("%.10fn", sum);
pNode = pNode->pNext;
}
return 0;
}
解决方案二:
帮顶………………嘿嘿
解决方案三:
观察数列规律,然后输入要加的n,然后等于sum,如果输出小数的话就要转化一下,我是这样理解的
解决方案四:
应该是输入输出方式的问题吧
解决方案五:
这个数列的规律是,第一项为2/1,然后分子+分母作为下一个分数的分子,其分子作为下一个分数的分母,依此类推,按这个规律代码如下
double sum = 0, x = 2.0, y = 1, z;
unsigned int n;
scanf("%u", &n);
while(n--)
{
sum += x/y;
z = x;
x += y;
y = z;
}
printf("%.10f", sum);