#include <iostream> #include <cmath> using std::cout; using std::cin; using std::endl; int main(void) ...{ int N =0; cout<<"请输入N: "; while(!(cin>>N)) ...{ cout<<"input fail,please retry!"<<endl; cout<<"请输入N: "; cin.clear(); } int k =0; int m = N; int i =0; int big,small,pre_i;//这里的几个变量不过十位了让代码的含义更清晰,其实完全可以省略. int j =0; //这个主要是为了测试和分析方便,也不是必要的. do ...{ pre_i = k = k+i; m = (N-k)/(i+1); if(N == m*(i+1)+k) ...{ big = m+i; small = m; ++j; cout<<"circle ["<<i+1<<"]; from "<<small<<" to "<<big<<endl; } ++i; }while(N>pre_i+1);//如果N<pre_i(前i项和),说明达到最长序列 cout<<"circles["<<i<<"] total "<<j<<endl; system("pause"); return0; }
#include <iostream> #include <cmath> using std::cout; using std::cin; using std::endl; int main(void) ...{ int N =0; cout<<"请输入N: "; while(!(cin>>N)) ...{ cout<<"input fail,please retry!"<<endl; cout<<"请输入N: "; cin.clear(); } int k =0; int m = N; int i =0; int big,small,pre_m;//这里的几个变量不过十位了让代码的含义更清晰,其实完全可以省略. int j =0; //这个主要是为了测试和分析方便,也不是必要的. int maxLength = pow(N*2.0,0.5) +1;//这是我们估计的最长序列长度。 // int maxLength = log((double)N); cout<<"maxLength = "<<maxLength<<endl; do ...{ k = k+i; // pre_m =k; m = (N-k)/(i+1); if(N == m*(i+1)+k) ...{ big = m+i; small = m; ++j; cout<<"circle ["<<i+1<<"]; from "<<small<<" to "<<big<<endl; } ++i; // }while((unsigned)N>(unsigned)pre_m);//如果N<pre_i(前i项和),说明达到最长序列 }while(i<maxLength); cout<<"circles["<<i<<"] total "<<j<<endl; system("pause"); return0; }