这个题不大会啊。。高手给我做做。。谢了。。。

时间:2021-07-20 08:50:38
题目描述:一个正整数可以表示成若干个连续整数之和。比如:15=1+2+3+4+5,15=4+5+6,15=7+8 。要求:编写一个程序,完成如下功能。
(1)从键盘接受一个正整数;
(2)如果该整数不能表示成若干个连续整数之和,输出提示信息:“不存在整数序列”。
(3)若整数可以表示成若干个连续整数之和,按照从小到大的顺序输出其所有的整数序列,并且每行输出一个序列。
样例输入:16
样例输出:不存在整数序列
样例输入:15
样例输出:
1 2 3 4 5 
4 5 6
7 8

8 个解决方案

#1


#include<iostream>
using namespace std;
int main()
{
    int n;
cin>>n;
int a[n-1],sum;
for(int i=0;i<n;i++)
for(int j=i+1;j<=n;j++)
{
sum=a[i]+a[j];
if(sum==n)
cout<<a[i];
cout<<a[j];
}
return 0;
}
这个程序那里错了??为什么不能执行啊??

#2


int a[n-1],sum;  这里出错啦,在定义数组时,[]中必须是一个确定的值,这里的n不是一个确定的值,有输入决定。lz可以在硬性的直接定义一个较大的数组。比如int a[1000].

#3


引用 1 楼 rodney111 的回复:
#include<iostream>
using namespace std;
int main()
{
  int n;
cin>>n;
int  a[n-1],sum;
for(int i=0; i<n;i++)
for(int j=i+1; j<=n;j++)
{
sum=a[i]+a[j];
if(sum==n)
cout<<a[i];
cout<<a[j];
}
……

红色部分明显出现数组越界啦,你定义的的是a[n-1],按下标访问,最多访问到a[n-2],怎么还试图访问a[n]呢?

#4


n的取值是能定下来的,n等于要【输入的数字的一半+1】

不是解决程序问题,呵呵

#5


 

int main()
{
int n;
cin>>n;
int sum=0;
bool flag=false;
for(int i=1;i<n;i++)
{
for(int j=i;j<n && sum<n ;j++)
{
sum+=j;
if(sum==n)
{
flag=true;
for (int j1=i;j1<=j;j1++)
{
cout<<j1<<" ";
}
cout<<endl;
break;
}
}

sum=0;
}
if (!flag)
cout<<"ľÓкÏÊʵÄ"<<endl;
   return 0;
}

#6


上面的代码 可以通过

#7


<code=C>
#include <iostream>
using namespace std;


int _tmain(int argc, _TCHAR* argv[])
{
 
int Num=0;
bool flag=false;
cout<<"请输入一个正整数!";
cin>>Num;
for(int i=1;i<=Num/2;++i)
{
int sum=0;
for(int j=i;j<Num,sum<Num;++j)
{

sum+=j;
if(sum==Num)
{
flag=true;
for(int k=i;k<=j;++k)
cout<<k<<" ";
cout<<endl;
}
}
if(flag==false) cout<<"不存在整数序列";
}
return 0;
}
</code>

#8



int main()
{
int n;
cin>>n;
bool t=false;
for(int i=1;i<=n/2;i++)
{
int sum=i;
for(int j=i+1;(sum+=j)<=n;j++)
{
if(sum==n)
{
for (int k=i;k<=j;++k)
{
t=true;
cout<<k<<" ";
}
cout<<endl;
}
}
}
if (!t)
{
cout<<"不存在整数序列"<<endl;
}
return 0;
}

#1


#include<iostream>
using namespace std;
int main()
{
    int n;
cin>>n;
int a[n-1],sum;
for(int i=0;i<n;i++)
for(int j=i+1;j<=n;j++)
{
sum=a[i]+a[j];
if(sum==n)
cout<<a[i];
cout<<a[j];
}
return 0;
}
这个程序那里错了??为什么不能执行啊??

#2


int a[n-1],sum;  这里出错啦,在定义数组时,[]中必须是一个确定的值,这里的n不是一个确定的值,有输入决定。lz可以在硬性的直接定义一个较大的数组。比如int a[1000].

#3


引用 1 楼 rodney111 的回复:
#include<iostream>
using namespace std;
int main()
{
  int n;
cin>>n;
int  a[n-1],sum;
for(int i=0; i<n;i++)
for(int j=i+1; j<=n;j++)
{
sum=a[i]+a[j];
if(sum==n)
cout<<a[i];
cout<<a[j];
}
……

红色部分明显出现数组越界啦,你定义的的是a[n-1],按下标访问,最多访问到a[n-2],怎么还试图访问a[n]呢?

#4


n的取值是能定下来的,n等于要【输入的数字的一半+1】

不是解决程序问题,呵呵

#5


 

int main()
{
int n;
cin>>n;
int sum=0;
bool flag=false;
for(int i=1;i<n;i++)
{
for(int j=i;j<n && sum<n ;j++)
{
sum+=j;
if(sum==n)
{
flag=true;
for (int j1=i;j1<=j;j1++)
{
cout<<j1<<" ";
}
cout<<endl;
break;
}
}

sum=0;
}
if (!flag)
cout<<"ľÓкÏÊʵÄ"<<endl;
   return 0;
}

#6


上面的代码 可以通过

#7


<code=C>
#include <iostream>
using namespace std;


int _tmain(int argc, _TCHAR* argv[])
{
 
int Num=0;
bool flag=false;
cout<<"请输入一个正整数!";
cin>>Num;
for(int i=1;i<=Num/2;++i)
{
int sum=0;
for(int j=i;j<Num,sum<Num;++j)
{

sum+=j;
if(sum==Num)
{
flag=true;
for(int k=i;k<=j;++k)
cout<<k<<" ";
cout<<endl;
}
}
if(flag==false) cout<<"不存在整数序列";
}
return 0;
}
</code>

#8



int main()
{
int n;
cin>>n;
bool t=false;
for(int i=1;i<=n/2;i++)
{
int sum=i;
for(int j=i+1;(sum+=j)<=n;j++)
{
if(sum==n)
{
for (int k=i;k<=j;++k)
{
t=true;
cout<<k<<" ";
}
cout<<endl;
}
}
}
if (!t)
{
cout<<"不存在整数序列"<<endl;
}
return 0;
}