1100 Sample Output15050 新手的水题,本来没什么难度,但对于像我这样初上路的新手,还是会遇到很多问题,写下来促进自己提升。首先可以直接用叠加#include<stdio.h>int main() {int n , sum = 0;while (scanf("%d", &n) != EOF) {for (int i = 0; i <= n; i++) {sum += i;}printf("%d/n/n", sum);}return 0;}看起来没什么问题,但是提交上去却是Wrong Answer仔细看一下可以发现sum每完成一个SUM(n)后没有清零,把值带入了下一个SUM(n)的计算中,正确的代码应该为:#include<stdio.h>int main() {int n;while (scanf("%d", &n) != EOF) {int sum = 0; // sum应该在这里定义for (int i = 0; i <= n; i++) {sum += i;}printf("%d/n/n", sum);}return 0;}如果用公式做sum = (n+1)*n/2 则需要注意另一个问题。题目说结果不超过32bit,但是如果用公式做的话中间值(n+1)*n可能超过32bit,提交如下代码#include<stdio.h>int main() {int n, sum = 0;while (scanf("%d", &n) != EOF) {sum = (n+1)*n/2;printf("%d/n/n", sum);}return 0;}果然是Wrong Answer正确的代码#include<stdio.h>int main() { int n, sum = 0; while (scanf("%d", &n) != EOF) { if(n%2==0) sum=n/2*(1+n); else sum=(n+1)/2*n; printf("%d/n/n", sum); } return 0;}新手入门,处处是坑。
新闻热点
疑难解答