题目
题目要求计算使用数字1、2、3、4可以组成多少个互不相同且无重复数字的三位数,并列出这些三位数。
实现的思路
实现的思路是通过三层循环来遍历所有可能的组合,其中每一层循环代表一个数字位(百位、十位、个位)。循环的每一次迭代都会检查当前选取的数字是否与之前的数字重复,如果不重复,则输出这个组合成的三位数,并增加计数器sum
的值。
代码(包含解析)
#include <stdio.h> int main(){ int i,j,k,sum=0; // 初始化变量,i, j, k用于循环,sum用于计数 // 三层循环遍历所有可能的组合 for(i=1;i<=4;i++) // i代表百位数字 for(j=1;j<=4;j++) // j代表十位数字 for(k=1;k<=4;k++) // k代表个位数字 if(i!=j && j!=k && k!=i){ // 检查当前组合是否没有重复数字 printf("%d\n",i*100+j*10+k); // 输出当前组合成的三位数 sum++; // 增加计数器 } printf("一共有%d个数\n",sum); // 输出总数 }
代码解读
-
变量初始化:
i
,j
,k
分别用于遍历百位、十位和个位的数字,sum
用于计数满足条件的三位数的数量。 -
三层循环:通过三层循环,遍历所有可能的数字组合。每一层循环代表一个数字位,范围都是1到4,因为题目中给定的数字只有1、2、3、4。
-
条件判断:
if(i!=j && j!=k && k!=i)
用来判断当前的组合是否满足没有重复数字的条件。只有当三个数字都不同时,才会进入这个条件语句内部。 -
输出与计数:如果当前组合满足条件,就输出这个三位数(通过
printf
函数和算术运算i*100+j*10+k
),并增加计数器sum
的值。 -
输出总数:在所有可能的组合遍历完毕后,输出满足条件的三位数的总数。