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

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

输入格式:
输入就一行,包含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;
}

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; 
}