一.题目描述
有1,2,3,4,四个数字能组成多少个互不相同且无重复数字的三位数,具体数值是多少?
二.解析
首先,需要使用for循环组成一个个、十、百的三位数,每个位数上的数字循环,使用if判断语句使其限定不出现重复的数字。定义一个count,使其自增计一共有多少组互不相同且无重复数字的三位数。
三.C语言代码
运行代码图
#include <stdio.h>
void main()
{
int i, j, k, a[100], n = 0;
for(i=1;i<=4;i++)
for(j=1;j<=4;j++)
for(k=1;k<=4;k++)
if (i != j && i != k && j != k)
{
a[n] = i * 100 + j * 10 + k;
n++; //计算有多少个三位数
}
printf("能组成%d个无重复数字的三位数\n", n);
printf("分别是");
for (i = 0; i < n; i++)
printf("%d\n", a[i]);
printf("\n");
}
四.调试结果
调试结果图
能组成24个无重复数字的三位数
分别是123
124
132
134
142
143
213
214
231
234
241
243
312
314
321
324
341
342
412
413
421
423
431
432
四.拓展
1.题目描述
对于长度为5位的一个01串,每一位都可能是0或1,一共有32种可能。它们的前几个是:
00000
00001
00010
00011
00100
请按从小到大的顺序输出这32种01串。
2.解析
共有5位数,那么就需要5层for循环,而且每一位都只是0和1,那么定义的变量就不能超过2进行五层循环。
3.C语言代码
运行代码
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n=0;
int i, j, k, x, y;
for (i = 0; i < 2; i++)
{
for (j = 0; j < 2; j++)
{
for (k = 0; k < 2; k++)
{
for (x = 0; x < 2; x++)
{
for (y = 0; y < 2; y++)
{
printf("%d%d%d%d%d\n", i, j, k, x, y);
n++;
}
}
}
}
}
printf("一共有:%d组\n", n);
return 0;
}
4.调试结果
00111
01000
01001
01010
01011
01100
01101
01110
01111
10000
10001
10010
10011
10100
10101
10110
10111
11000
11001
11010
11011
11100
11101
11110
11111
一共有:32组