要求是输入任意正整数,如果能用连续的奇数相加得到这个正整数就输出这些奇数的第一个数和最后一个数,如果不能用奇数相加表示就输出这个数不能用奇相加表示.
问题补充:我们要求是用循环控制来做..就是for语句和while语句来做..有人说任何正整数能用连续的奇数相加而得,例如 13*13*13 =2197 =157+159……+181 .
写一个程序来判断这个说法正确与否。如果是正确的,输出这个加法表达式的第一个和最后一个数。如果不正确,输出该数不可以被这样分割。
Note:
1. 正整数的取值范围应由使用者自己判断。当输入0时,程序结束。
2. 输出的数据要分开显示。

#include "stdio.h"
main()
{
int i,j,k,s;
int flag;
while(1)
{
flag=0;
printf("Enter a integer:\n");
scanf("%d",&i);
if(i==0)break;
for(j=1;j<=i/2;j+=2)
{
s=0;
for(k=j;s<i;k+=2)s+=k;
k-=2;
if(s==i)
{
flag=1;
printf("%d=%d+...+%d\n",i,j,k);
break;
}
}
if(flag==0) printf("这个数不能用奇相加表示.");
}
printf("You will leave this program\n");
getchar();
}

下面这个比较好懂

#include<stdio.h>
void main()
{
int n,i,j,f=0,a[2],sum = 0;
printf("Enter a integer:\n");
scanf("%d",&n);
for(i=1;i<n;i+=2)
{
j=i;
a[0]=i;
for(sum=j;sum<n;)
{
j+=2;
sum+=j;
}
if(sum==n)
{
a[1]=j;
f=1;
break;
}
}
if(f==0) printf("这个数不能用连续奇相加表示\n");
else
printf("%d,%d\n",a[0],a[1]);
}