#include <stdio.h>
main()
{
int n,a,m,i,flag=0;
printf("input a number ( >0 ) : ");
scanf("%d",&m);
for(n=2; n<=m/2+1; n++)
{
if((2*m-n*n)%n==0)
{
if(((2*m-n*n)/n+1)%2==0)
{
flag=1;
a=((2*m-n*n)/n+1)/2 ;
printf("%d=",m);
for(i=0; i<n-1; i++)
printf("%d+",a++);
printf("%d\n",a);
}
}
}
if(flag==0) printf("Don't have\n");
}
设输入的数为m
输出的第一个数为a ,有n个连续的数
则可得
a a+1 a+2 .... a+n-1
即 (2a+n-1)n/2=m
对于每个可能的n,测试相应的a是否为整数,是,即可输出
你还不如全部改成double型,省掉好些if
[此贴子已经被作者于2006-11-22 21:32:03编辑过]
是个好问题!!!!!!!!!!!
不过时间有限?我就不写程序了!!!!!!!
说说我的编程思想好了!!!!!!!!!1
定义一个数组!!!!!!要求它前后相差1
再定义一个变量M
M=M+1;把M的值给数组就可以了
用三个IF判断。
用两个FOR 语句。
最后输出就可以了!!!!!!!
简单吧
!!!!!!!!!!!!!
可能叙述的不清楚!!!!!!!!
我的确时间很急!!!!!!!!!
如有兴趣就和我探讨吧!!!!!!!!!!
QQ304239467
[QUOTE]#include <stdio.h>
int main(void)
{
long left, right;
long sum;
long GIVEN;
scanf("%ld",&GIVEN);
for (sum = 0, left = right = 1; left < GIVEN/2+1; right++)
{
sum += right;
while (sum > GIVEN)
{
sum -= left;
left++;
}
if (sum == GIVEN)
printf("%ld - %ld\n", left, right);
}
return 0;
}
[/QUOTE]
这个想法不错.
不过有点要提,就是2的n次方是无解的如:2,4,6,8等.