藍橋杯演算法訓練 連續正整數的和
阿新 • • 發佈:2019-02-15
演算法訓練 連續正整數的和
時間限制:1.0s 記憶體限制:256.0MB
問題描述
78這個數可以表示為連續正整數的和,1+2+3,18+19+20+21,25+26+27。
輸入一個正整數 n(<=10000)
輸出 m 行(n有m種表示法),每行是兩個正整數a,b,表示a+(a+1)+...+b=n。
對於多種表示法,a小的方案先輸出。 樣例輸入 78 樣例輸出 1 12
18 21
25 27
輸入一個正整數 n(<=10000)
輸出 m 行(n有m種表示法),每行是兩個正整數a,b,表示a+(a+1)+...+b=n。
對於多種表示法,a小的方案先輸出。 樣例輸入 78 樣例輸出 1 12
18 21
25 27
AC code:
#include<stdio.h> #include<iostream> #include<math.h> using namespace std; int main() { int n,s,an,i,ans,cnt,fg; double a1; while(scanf("%d",&n)!=EOF) { ans=0; int mm=0.5*(-1+sqrt(1+8*n)); //列舉的最大範圍 for(cnt=mm;cnt>=2;cnt--) { a1=(2*n+cnt-cnt*cnt)*1.0/(2.0*cnt); if(int(a1)==a1&&a1>0) { printf("%d %d\n",int(a1),int(a1+cnt-1)); } } } return 0; }