主题:[讨论]求改错 急急急 高手帮忙
zhangyifei216
[专家分:0] 发布于 2011-04-01 22:03:00
#include<stdio.h>
main()
{
int sum,i,j,n,k;
printf("请输入一个正数");
scanf("%d",&n);
for(k=1;k<=n/2;k++)
{
for(i=k;i<=n/2+1;i++)
{
sum+=i;
if(sum==n)
{
for(j=1;j<=i;j++)
printf("%4d",j);
}
}
}
}
求该程序有什么逻辑错误(语法没错误)
本程序是关于求一个数能被几个连续的数相加而来
例
15=1+2+3+4+5+6
15=4+5+6
15=7+8
输入一个正数 输出所有可能
回复列表 (共5个回复)
沙发
hereforc [专家分:210] 发布于 2011-04-08 00:17:00
#include<stdio.h>
main()
{
int sum,i,j,n,k,a[100];
printf("请输入一个正数");
scanf("%d",&n);
for(k=1;k<=n/2;k++)
{ sum=0;
for(i=k,j=0;i<=n/2+1;i++,j++)
{ a[j]=i;
sum+=i;
if(sum==n)
{
for(j=0;j<i-k+1;j++)
printf("%4d",a[j]);
break;
}
}
printf("\n");
}
}
板凳
hereforc [专家分:210] 发布于 2011-04-08 00:19:00
sum要初始化为0 每个i用数组a【】储存 你的代码后面问题有点大 自己看下吧
3 楼
hereforc [专家分:210] 发布于 2011-04-08 00:21:00
不要意思最后那个输出空格不要了放在if里面#include<stdio.h>
main()
{
int sum,i,j,n,k,a[100];
printf("请输入一个正数");
scanf("%d",&n);
for(k=1;k<=n/2;k++)
{ sum=0;
for(i=k,j=0;i<=n/2+1;i++,j++)
{ a[j]=i;
sum+=i;
if(sum==n)
{
for(j=0;j<i-k+1;j++)
printf("%4d",a[j]);
printf("\n");
break;
}
}
}
}
4 楼
ckrok [专家分:30] 发布于 2011-04-08 11:30:00
不知道为什么要用数组。。
楼主只要在第一层循环初始化sum = 0;
在最内层循环初始化 j=1改成 j=k;就可以了。
美观起见最好,在最内层循环的最后加个printf("\n");
5 楼
cgl_lgs [专家分:21040] 发布于 2011-04-08 13:51:00
这问题有人在Pascal区发过。
http://bbs.pfan.cn/post-349846.html
我来回复