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;}新手入門,處處是坑。
新聞熱點
疑難解答