C语言100道经典题-求1、2、3、4能组成多少个不同且无重复的三位数

题目:有1、2、3、4这4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?

思路:1、2、3、4能组成无重复数字的三位数最小是123,最大是432,根据这个,设计一个for循环,最小是123,最大是432,在循环中,计算出这个当前数字的个位、十位和百位数字都是什么,用if进行筛选,选出个位十位百位这三个数字不相等的数字,再选出这3个数字都小于4的数字。


方法一:

1234567891011121314151617181920
#include <stdio.h>int main() {    int i = 0;    int a=0,b=0,c=0,count=0;    for (i=123; i<=432; i++) {        a = i % 10;//取这个数字的各位        c = i / 100;//计算出这个数字的百位        b = ( i - ( c * 100 )) / 10;//计算这个数字的十位        if (a!=b && a != c && b != c)//首先,a,b,c三个数字不相等        {            if (a <= 4 && b <= 4 && c <=4 && a != 0 && b != 0 && c != 0)//其次,a,b,c三个数字都必须小于等于4且大于0            {                printf("%d ",i);                count++;//计次            }        }    }    printf("\nCount = %d\n",count);    return 0;}

输出的结果是:

12
123 124 132 134 142 143 213 214 231 234 241 243 312 314 321 324 341 342 412 413 421 423 431 432 Count = 24

方法二:

12345678910111213141516171819202122
#include <stdio.h>int main(){    int a,b,c;    int count = 0;    for (a=1; a<=4; a++) //先用三个for循环获得这4个数字组成的3位数的所有组和    {        for (b=1; b<=4; b++)         {            for (c=1; c<=4; c++)             {                if (a != b && a != c && b != c) //在这4个数的组合中筛选各不相等的                {                    printf("%d%d%d ",a,b,c);                    count++;                }            }        }    }    printf("\nCount = %d\n",count);    return 0;}

结果:

12
123 124 132 134 142 143 213 214 231 234 241 243 312 314 321 324 341 342 412 413 421 423 431 432 Count = 24
🔍 ×