(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;
}
这个程序那里错了??为什么不能执行啊??
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
红色部分明显出现数组越界啦,你定义的的是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>
#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;
}
这个程序那里错了??为什么不能执行啊??
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
红色部分明显出现数组越界啦,你定义的的是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>
#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;
}