为什么编译没问题,提交就错了呢?杭电ACM2018
答案:3 悬赏:10
解决时间 2021-02-18 10:00
- 提问者网友:刪除丶後
- 2021-02-17 11:28
#include
void main()
{
int n,i,j;
int s;
while(scanf("%d",&n)==1 && (n>=0 || n<55))
{
if(n==0)
break;
if(n<=3)
s=n;
else
s=(n-2)*(n-3)/2+3;
printf("%d\n",s);
}
}
最佳答案
- 二级知识专家网友:浪女动了心
- 2021-02-17 12:28
你的算法有问题,这不是直接和输入值有关的问题,而是和前一个及前第三个值有关的递推题,可以用数组保存数据,根据输入直接输出数组中的数据,这样效率高。
AC代码, 你可以测试下输入靠后面的数据看看结果是否和下面代码得到的结果相同
=============================================
#include
int main(void)
{
long a[55] = {1, 2, 3, 4}, i = 0, m = 0;
for (i=4; i<55; i++)
a[i] = a[i-1] + a[i-3];
while (scanf("%ld", &m)!=EOF, m)
{
printf("%ld\n", a[m-1]);
}
return 0;
}
=============================================
全部回答
- 1楼网友:转身→时光静好
- 2021-02-17 15:08
if(fabs(a[j])<fabs(a[k]))
改为
if(fabs(double(a[j]))<fabs(double(a[k])))
具体看fabs函数
修改后就能ac了(已测试)
- 2楼网友:苦柚恕我颓废
- 2021-02-17 13:44
请考虑题目对运行时间,运行效率,内存使用状况的要求
我要举报
大家都在看
推荐资讯