原始页面:http://acm.whu.edu.cn/learn/problem/detail?problem_id=1036
这应该是一个简单的动态编程问题。我想出了解决方案如下:
int main(void)
{
double d[501];
int i;
d[0] = d[1] = 1.;
d[2] = 2.;
for(i = 3; i<=500; i++)
d[i] = d[i-1] + d[i-2] + d[i-3];
int n;
while(scanf("%d", &n) == 1) {
if(n == 0) return 0;
printf("%.0lf\n", d[n]);
}
return 0;
}
但错误答案在提交后报告。我真的不知道为什么。
答案 0 :(得分:2)
double对于精度
是不够的你应该使用高精度来解决它
答案 1 :(得分:1)
可能是小数点。 printf("%.0lf\n", 1.0);
将打印1.0
,但系统可能会等待1
。