C语言编程。从键盘输入4个数,能组成多少互不相同的三位数?将个数以及所组成的数,输出到屏幕上。

#include
main()
{
int a[4];
int i,j,k,x;
printf("请输入四个一位数:");
printf("\n");
for(i=0;i<4;i++)
scanf("%d",&a[i]);
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
for(k=0;k<4;k++)
{
if(i!=j&&i!=k&&j!=k)
{
printf("%d%d%d ",a[i],a[j],a[k]);
x++;
}

            }
    }   
}
             printf("\n");
             printf("三位数总数为%d",x);
        return 0;

}


```我已经写完了如上程序,请问如何增加以下程序:输入的数中有0,使0不在百位

if (i!=j&&i!=k&&j!=k&&a[i]!=0) //这里加上a[i]!=0,并且注意后面那个&是&&

#include <stdio.h>

int main(void) 
{
    int a[4];
    int i,j,k,x=0; //这里x要初始化
    printf("请输入四个一位数:");
    printf("\n");
    for(i=0;i<4;i++)
        scanf("%d",&a[i]);
    for(i=0;i<4;i++)
    {
        for(j=0;j<4;j++)
        {
            for(k=0;k<4;k++)
            {
                if(i!=j&&i!=k&&j!=k&&a[i] != 0)
                {
                    printf("%d%d%d ",a[i],a[j],a[k]);
                    x++;
                }
            }
        }   
    }
    printf("\n");
    printf("三位数总数为%d",x);
    return 0;
}

请输入四个一位数:
0 2 3 4
203 204 230 234 240 243 302 304 320 324 340 342 402 403 420 423 430 432
三位数总数为18

注意,你的程序必须输入4个不同的数

理论上是排列组合一种4个数相同只有1个,一种4个数有2个相同一种三个数相同一种4个都不同,还要考虑首位不能为0综合用if句就行了

在最里面那层if里面加一层判断

if(a[i]!=0)或者if(a[i]*100+a[j]*10+a[k]>=100)

还有,如果要输出不同的三位数的话,可能还要判断一下这个数是否重复
比如当a[0]=1 a[1]=2 a[2]=3 a[4]=1,还要判断一下121之前是否输入,比如前面已经输出a[0]a[1]a[3](121)了,后面循环到a[3]a[1]a[0]的时候需要判断一下,不然就会输出两个121(一个a[0]a[1]a[3],一个a[3]a[1]a[0])

给一个我能想到的解决方法,就是把输出过的数储存在一个数组里,然后每次输出之前用循环对比数组判断一下之前的数是否已经出现过

或许还有更好的办法,不过我最先就想到这个了
本人渣渣,有错望指正
————————————————
你那个只能防止输入不同的一位数不重复,但是输入相同的数就会有重复的了

如果4个数中有重复的数,输出结果还是会重复;如:2 1 3 3
输出为:
213 213 231 233 231 233
123 123 132 133 132 133
321 323 312 313 332 331
321 323 312 313 332 331

还有一种情况,输出结果应该用求和形式输出,如果计算出的结果还要用于下一个运算的话。