一、题目描述
有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
二、个人解析
首先,需要使用for循环组成一个个、十、百的三位数,每个位数上的数字不超过5,使用if判断语句使其限定不出现重复的数字。定义一个n,使其自增计一共有多少组互不相同且无重复数字的三位数。
三、C语言代码
#include <stdio.h>
#include <stdlib.h>
int main() {
int n;
int i,j,k;
for(i=1;i<5;i++)
{
for(j=1;j<5;j++)
{
for(k=1;k<5;k++)
{
if(i!=j&&i!=k&&j!=k)
{
printf("%d%d%d\n",i,j,k);
n++;
}
}
}
}
printf("一共有:%d组\n",n);
return 0;
}
输出结果:
123
124
132
134
142
143
213
214
231
234
241
243
312
314
321
324
341
342
412
413
421
423
431
432
一共有:24组
四、拓展
还有一类题与此题类似:01子串<蓝桥杯基础练习>
题目描述
对于长度为5位的一个01串,每一位都可能是0或1,一共有32种可能。它们的前几个是:
00000
00001
00010
00011
00100
请按从小到大的顺序输出这32种01串。
输入格式
本试题没有输入。
输出格式
输出32行,按从小到大的顺序每行一个长度为5的01串。
样例输出
00000
00001
00010
00011
<以下部分省略>
个人思路
此题思路与上述相仿,一共有5位数,那么就需要5层for循环,而且每一位都只是0和1,那么定义的变量就不能超过2进行五层循环。
C语言代码:
#include <stdio.h>
#include <stdlib.h>
int main() {
int n;
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;
}
输出结果:
00000
00001
00010
00011
00100
00101
00110
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组