0%

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

文章时效性提示

本文发布于 501 天前,部分信息可能已经改变,请注意甄别。

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

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


方法一:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#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;
}

输出的结果是:

1
2
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

方法二:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#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;
}

结果:

1
2
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