40分求大神解惑,我觉得没问题呀

P1089 [NOIP2004 提高组] 津津的储蓄计划

改完的AC代码 ```cpp #include <stdio.h> int arr1[15], arr2[15]; int main() { int a, h, flag = 0, m; int rest = 0, sum = 0; for (int i = 0; i < 12; i++) { scanf("%d\n", &a); arr1[i] = a; } for (int i = 0; i < 12; i++) { m = rest + 300 - arr1[i]; if (m < 0) { flag = 1; h = i; break; } else { if (m >= 100) { arr2[i] = (m / 100) * 100; rest = m - arr2[i]; } else { arr2[i] == 0; rest = m; } } } if (flag == 1) { printf("%d", -(h + 1)); } else if (flag == 0) { for (int i = 0; i < 12; i++) { sum = sum + arr2[i]; } printf("%d", 12 * sum / 10 + rest); } return 0; } ``` 我真服了我竟然调你代码调了20min 说说你的错误 1.数组越界,建议所有数组开全局,全局变量自带初始化(都默认等于零) 2.谁教你这样写循环的,循环变量最好用局部,否则容易导致后面循环出错(PS:如果需要循环变量可以用其他变量保存啊,比如我这里就用h) 3.数组范围最好开题目的最大值+5,防止出现意想不到的越界 4.输出的%d是整型,1.2*sum时他已经变为浮点变量了,所以输出会出错我这里改成了12/10 其他小问题就不说了,毕竟像是初学者(累死我了)
by sunyuyang @ 2022-10-24 08:44:47


@[sunyuyang](/user/581411) 太感谢了
by TBA3D @ 2022-10-24 11:19:12


@[sunyuyang](/user/581411) 新手上路,谢谢指点
by TBA3D @ 2022-10-24 11:23:30


``` #include <bits/stdc++.h> using namespace std; int main() { int a[13]; int ans=0,last=0; for(int i=0;i<12;i++) { cin>>a[i]; last+=300; last-=a[i]; if(last<0) { cout<<"-"<<i+1; return 0; } ans+=last/100; last%=100; } cout<<last+ans*120; return 0; }
by sunruishe @ 2022-10-28 22:23:29


|