連續整數的和
阿新 • • 發佈:2019-01-06
這道題我很悲劇,悲劇的是不會做,悲劇的是別人告訴我怎麼做後,我依舊錯了。
看看題目,其實看不出什麼名堂,也沒感覺他有什麼,我第一方法就是數的列舉
#include<stdio.h> #include<iostream> #include<math.h> using namespace std; int main() { int N,i,j; bool flag; cin>>N; flag=true; for(i=1;i<N;i++) for(j=i+1;j<N;j++) if((i+j)*(j-i+1)/2==N){ printf("%d\n",i); flag=false; break; } else if((i+j)*(j-i+1)/2>N) break; if(flag) printf("No Solution\n"); }
果斷超時,做了半天沒過,找大神,大神果然是大神,幾位大神,連停頓都沒停頓,說列舉長度,
(x+x+L-1)*L=2*S
長度L小於等於sqrt(2*S) x=((2*s)/L+1-L)/2;寫了幾次才水過
#include<stdio.h> #include<math.h> int main() { int n,L,i,s; bool flag=true; scanf("%d",&n); n=2*n; L=sqrt(n); for(i=L;i>=2;i--) { s=(n/i-i+1); if(n%i==0&&s%2==0) {printf("%d\n",s/2);flag=false;} } if(flag) printf("No Solution\n"); }