CSDN编程挑战——《高斯公式》
生活随笔
收集整理的這篇文章主要介紹了
CSDN编程挑战——《高斯公式》
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
高斯公式
題目詳情:
高斯在上小學(xué)時(shí)發(fā)明了等差數(shù)列求和公式:1+2+..+100=5050?,F(xiàn)在問題在于給你一個(gè)正整數(shù)n,問你他可以表示為多少種連續(xù)正整數(shù)之和?(自身也算)。
輸入格式:
多組數(shù)據(jù),每組數(shù)據(jù)一行,一個(gè)正整數(shù)n。 0<n<2000000000
輸出格式:
每組數(shù)據(jù)一行,包含一個(gè)正整數(shù),表示結(jié)果。
答題說明:
輸入樣例
5
120
輸出樣例:
2
4
解釋:
5=2+3=5
120=1+2+...+15=22+23+24+25+26=39+40+41=120
初稿代碼:
/*3: 3、1+2=34: 4、5: 5、2+3=56: 6、1+2+3=6 7: 7、3+4=7 8: 8、9: 9、4+5=9、2+3+4=910: 10、1+2+3+4=10 分析: 輸入n設(shè) s,x (x個(gè)從s開始連續(xù)的數(shù)相加等于n,例如 :10=1+2+3+4中 n:10 s:1 x=4)于是有求和公式: (s+(s+x-1)) ----------- * x = n2 根據(jù)求和公式暴力即可求解 */ #include "stdio.h" #include "math.h" int main() {int count;long long x,n;while(scanf("%I64d",&n)!=EOF){count=1; for(x=2;x<n;x++){double s=(n+(x-x*x)/2.0)/x;if(s>=1){if(floor(s+0.5)==s){ //判斷 s 為整數(shù) printf("%d > x:%I64d s:%d\n",count+1,x,(int)s);count++;}else{printf("%d,%lf不整除!\n",x,s);} }else{printf("最多不超過%d個(gè)數(shù)相加!\n",x); break;}}printf("result:%d\n",count);break;} return 0; }
AC后代碼:
#include "stdio.h" #include "math.h" int main() {int count;long long x,n;while(scanf("%I64d",&n)!=EOF){double s=n;for(count=0,x=2;s>=1;x++){if(floor(s+0.5)==s) {count++;// printf("%d > x:%d s:%d\n",count,x-1,(int)s);}s=(double)n/x+(1-x)/2.0; }printf("%d\n",count);// break;} return 0; }注意:程序中數(shù)據(jù)類型為 int 對比較大的數(shù)據(jù)計(jì)算過程中可能會溢出
CSDN挑戰(zhàn)編程交流群:372863405?????????????????
總結(jié)
以上是生活随笔為你收集整理的CSDN编程挑战——《高斯公式》的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 颐和园雨天可以划船吗
- 下一篇: 检查男人不育到平顶山哪家医院好