思路:等差数列求和: sn=a1*n+n*(n-1)*d/2 在这里d为1
#include<stdio.h>
//#define N 1000#define M 10
void print(int k)
{
int sn=0,t=0;
for(int a1=1;a1<(k+1)/2;a1++)
for(int n=0;n<(k+1)/2;n++)
{
sn=a1*n+n*(n-1)/2;
if(sn==k)
{ ++t;
printf("%d=%d",k,a1);
for(int i=1;i<=n-1;i++)
printf("+%d",int(a1+i));//等差数列的其他项也为整数,a+i实质是整数,装换类型
printf("\n");
}
}
if(t==0)
printf("%d不能被表示成n个连续正整数之和\n",k);
else
printf("%d可以表示成%d个连续正整数之和\n",k,t);
}
void all(int m)
{
for(int i=1;i<=m;i++)
print(i);
}
int main()
{
// print(N);
all(M);
return 0;
}
//结果
1不能被表示成n个连续正整数之和
2不能被表示成n个连续正整数之和
3不能被表示成n个连续正整数之和
4不能被表示成n个连续正整数之和
5=2+3
5可以表示成1个连续正整数之和
6不能被表示成n个连续正整数之和
7=3+4
7可以表示成1个连续正整数之和
8不能被表示成n个连续正整数之和
9=2+3+4
9=4+5
9可以表示成2个连续正整数之和
10=1+2+3+4
10可以表示成1个连续正整数之和
Press any key to continue
http://zhidao.baidu.com/link?url=ViWLvceSA4_qXZHBkD0fDfK9VUXfygXAk2-ituGsHA6ZVdJzAMnofrAUY7JsCYOEjz5-Ur8YNkk2jg1AdznhX_