1100 Sample Output15050 新手的水題,本來沒什么難度,但對于像我這樣初上路的新手,還是會遇到很多問題,寫下來促進(jìn)自己提升。首先可以直接用疊加#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仔細(xì)看一下可以發(fā)現(xiàn)sum每完成一個(gè)SUM(n)后沒有清零,把值帶入了下一個(gè)SUM(n)的計(jì)算中,正確的代碼應(yīng)該為:#include<stdio.h>int main() {int n;while (scanf("%d", &n) != EOF) {int sum = 0; // sum應(yīng)該在這里定義for (int i = 0; i <= n; i++) {sum += i;}printf("%d/n/n", sum);}return 0;}如果用公式做sum = (n+1)*n/2 則需要注意另一個(gè)問題。題目說結(jié)果不超過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;}新手入門,處處是坑。
新聞熱點(diǎn)
疑難解答
圖片精選