题目1:有 1、2、3、4 四个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
程序分析:可先将四个数字组成所有的排列,再去掉不满足条件的排列。
可以通过for循环语句确定这三位数,再通过if语句除去不满足条件的。
#include<stdio.h>
int main(){
int a,b,c;
for(int i=1;i<5;i++){
for(int j=1;j<5;j++){
for(int k=1;k<5;k++){
if(i!=j&&i!=k&&j!=k){
printf("%d%d%d ",i,j,k);
}
}
}
}
return 0;
}
程序分析:可先限制范围去掉不满足条件的,再输出结果。
可先确定百位上的数(i),再通过if语句确保十位上的数字(j)不重复;
然后确定十位上的数(j),再通过if语句确保个位上的数字(k)不重复;
三位数中的每一位都不重复,最后输出。
#include<stdio.h>
int main(){
int a,b,c;
for(int i=1;i<5;i++){
for(int j=1;j<5;j++){
if(j!=i){
for(int k=1;k<5;k++){
if(k!=j&&k!=i){
printf("%d%d%d ",i,j,k);
}
}
}
}
}
return 0;
}
结果展示:根据算法分析结果应该有4*3*2个三位数(24个)
扩展:如果数字太多不容易观察结果是否正确,可以添加代码使程序输出所求数的总数量以便更直观。
#include<stdio.h>
int main(){
int a,b,c;
int count;
for(int i=1;i<5;i++){
for(int j=1;j<5;j++){
for(int k=1;k<5;k++){
if(i!=j&&i!=k&&j!=k){
count++;
printf("%d%d%d ",i,j,k);
}
}
}
}
printf("\n%d",count);
return 0;
}
结果展示:
过程总结:
for循环语句括号里面用 " ;"不能写成" ,"
在写限制条件位数不重复时不能写成连等号,需要使用连接词连接(&&)(||)