m0_58061620 2021-12-26 16:41 采纳率: 50%
浏览 23
已结题

输出与预期不符,哪里不对啊

按从小到大的顺序输入四个互不相同的一位数字,能组成多少互不相同且无重复数字的四位数?输出这些四位数

输入格式:
输入就一行,包含4个整数,他们之间均以一个空格分隔。

输出格式:
按照从小到大的顺序输出满足条件的4位数。输出每个数之后需要回车换行。


#include<stdio.h>
int main()
{
    int a[4],i=0,j,n=0,b[500];
    for(i=0;i<4;i++)
    scanf("%d",&a[i]);
    int f1,f2,f3,f4;
    for(f1=0;f1<4;f1++)
    {
        for(f2=0;f2<4;f2++)
        {
            for(f3=0;f3<4;f3++)
            {
                f4=a[0]+a[1]+a[2]+a[3]-f1-f2-f3;
                if(f4>0&&f1!=f2&&f1!=f3&&f1!=f4&&f2!=f3&&f2!=f4&&f3!=f4)
                {
                b[n++]=a[f1]*1000+a[f2]*100+a[f3]*10+a[f4];
                }
            }
            
        }
    }
    for(i=0;i<n;i++)
    {
        for(j=0;j<n-i;j++)
        {
            if(b[j]>b[j+1])
            {
                int k=b[j];
                b[j]=b[j+1];
                b[j+1]=k;
            }
        }
    }
    for(i=0;i<n;i++)
    {
    if(b[i]>999&&b[i]<10000)
    printf("%d\n",b[i]);
}
    return 0;
}
  • 写回答

1条回答 默认 最新

  • fuill 2021-12-26 16:46
    关注

    img

    #include<stdio.h>
    
    int main()
    {
        int i,j=0,k,h;
        int a,b,c,d;
        int t[4];
        scanf("%d",&t[0]);
        scanf("%d",&t[1]);
        scanf("%d",&t[2]);
        scanf("%d",&t[3]);
        int f=0;
        int s[10000];
        
        
        int count=0;
        int n;
        for(i=0;i<4;i++)
        {
            a=t[i]*1000;
            for(j=0;j<4;j++)
            {
                b=t[j]*100;
                for(k=0;k<4;k++)
                {
                    c=t[k]*10;
                    for(h=0;h<4;h++)
                    {
                        d=t[h];
                        for(n=9999;n>999;n--)
                        {
                            if(n==a+b+c+d)
                            {
                                if(i!=j&&i!=k&&i!=h&&j!=k&&j!=h&&k!=h)
                                {
                                    //printf("%d\n",n);
                                    s[f]=n;
                                    f++;
                                    count++;
                                }
                            }
                        }
                    }
                }
            }
        }
    
    for(h=0;h<f-1;h++)
    {
        for(k=0;k<f-1-h;k++)
        {
            if(s[k]>s[k+1])
            {
                int tem=s[k];
                s[k]=s[k+1];
                s[k+1]=tem;
            }
        }
    }
    
    
    for(h=0;h<f;h++)
    {
        printf("%d\n",s[h]);
    }
    
    
        //printf("count:%d\n",count);
    
        return 0; 
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 12月26日
  • 已采纳回答 12月26日
  • 创建了问题 12月26日