vlambda博客
学习文章列表

C语言经典例题——第一例


C语言经典例题——第一例
C语言经典例题——第一例



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



思路:三个数字,每一位数字都代表一重循环,只需要判断让数字不相同即可。

解法一:

#include <stdio.h>int main(){ int i,j,k,count=1; 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%d\n",count++,i,j,k);}


解法二:

在第二重循环就判断,省去不必要循环。

#include<stdio.h>int main(void){ int i,j,k,count=0; for(i = 1;i < 5;i++) { for(j = 1;j < 5;j++) { if(i == j) continue; for(k = 1;k < 5;k++) { if(i == k || j == k) continue; printf("%d,%d,%d\n",i,j,k); count++; } } } printf("共有%d种。\n",count); return 0;}

解法三:(个人不建议初学者学习)

#include <stdio.h>#include <stdlib.h>
int b[4],arr[4];//定义两个数组用来类比int Count=0;//计数器void DFS(int step){ int i; if(step==5){ if(arr[1]!=arr[2]&& arr[1]!=arr[3]&&arr[2]!=arr[3]){//判断哪些符合条件 Count++; printf("%d%d%d\n",arr[1],arr[2],arr[3]);//输出可用排列 } return ; } for(i=1;i<=4;i++){ if(b[i]==0){ arr[step]=i; b[i]=1;//排除重复 DFS(step+1);//自己调用自己 b[i]=0; } } return ;}
int main(void){ DFS(1); printf("共有%d种",Count); return 0;}

C语言经典例题——第一例