回 帖 发 新 帖 刷新版面

主题:[讨论]求改错  急急急  高手帮忙

#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个回复)

沙发

#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");
    
    }
}

板凳

sum要初始化为0 每个i用数组a【】储存 你的代码后面问题有点大 自己看下吧

3 楼

不要意思最后那个输出空格不要了放在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 楼

不知道为什么要用数组。。

楼主只要在第一层循环初始化sum = 0;
在最内层循环初始化 j=1改成 j=k;就可以了。
美观起见最好,在最内层循环的最后加个printf("\n");

5 楼

这问题有人在Pascal区发过。
http://bbs.pfan.cn/post-349846.html

我来回复

您尚未登录,请登录后再回复。点此登录或注册