<html> <HEAD></HEAD> <BODY> <h2>分解n为连续的正整数</h2> <a href="">博客学习</a> <textarea rows="50" cols="50"> #include <iostream> using namespace std; void fun(int m) { int i,j,n,l,k=0; for(i=0;i<m;i++) { n=i;l=0;j=i; while(l<m) { l+=j; j++; } if(l==m) { cout<<n<<"->"<<j-1<<endl; k++; } } if(k==0) cout<<"NONE"<<endl; cout<<endl<<endl; } int main() { fun(20); return 0; } </textarea> <textarea rows="50" cols="50"> 占时还待翻译 </textarea> <textarea rows="50" cols="50"> #include <iostream> using namespace std; void fun(int n) { int i=2; int p=0,m=p; int j=0; while(i<=n/3) { if(i%2==0); if(i%2==1) { p=n/i; m=p;j=i/2+1; while(j--) { cout<<"+"<<p-j; } j=i/2; while(j--) { cout<<"+"<<++p; } } i++;cout<<endl; } } int main() { /** cin 4 cout 4=1+3 4=2+2 http://anycodes.cn/zh/ 今日发现 http://homepage.yesky.com/ 一个正整数可以为几个连续正整数的和 C++ **/ fun(20); return 0; } </textarea> <textarea rows="50" cols="50"> 以自己的想法写了一把 思路很清楚 但只能说能给一个解 有不对 和缺少值的情况 </textarea> <textarea rows="50" cols="50"> void fun(int n) { for(int i=1;i<n;i++) { for(int j=i+1;j<n;j++) {int sum=0;int k=i; for(k=i;k<=j;k++) { sum+=k; } if(sum==n) cout<<i<<" --------> "<<j<<endl; } } } </textarea> <textarea rows="50" cols="50"> 这样的代码是正确的但是 是高复杂度的 因为j找了多次遍历 if(sum==n) {cout<<i<<" --------> "<<j<<endl;break;} 改写为这样 就接近原答案的复杂度了 感觉好理解 但都是一样的思想 </textarea> <textarea rows="50" cols="50"> </textarea> <textarea rows="50" cols="50"> </textarea> <textarea rows="50" cols="50"> </textarea> <textarea rows="50" cols="50"> </textarea> </BODY> </html>
时间: 2024-12-29 01:44:45