dfs写的全排列
-
#include <iostream> using namespace std; int ans; char s[8]; char z[6]={'A','B','C','D','E','F'}; //给第K位选数字,k=1-6 void dfs(int k){ if(k==7){//debug:k=7cuo //出并判断是否有连续3位相同 for(int i=1;i<=4;i++){ if(s[i]==s[i+1]&&s[i]==s[i+2]){ //出现了连续的三个字符,不符合条件 return; } } //到这里还没return就是没有相同字符 ans++; return; } //不选 //选123,dfs,回溯 if(k<=3){ //s[k]]0-9/a-f for(int i=0;i<=9;i++){ s[k]=i; dfs(k+1); } for(int i=0;i<=5;i++){ s[k]=z[i]; dfs(k+1); } } else{ for(int i=0;i<=9;i++){ s[k]=i; dfs(k+1); } } } int main() { dfs(1); cout<<ans; return 0; }
参考:全排列
#include <iostream>
using namespace std;
int ans;
void check(int i,int j,int k,int l,int m,int n){
if(i==j&&i==k) return ;
if(j==k&&j==l) return ;
if(k==l&&k==m) return ;
if(l==m&&l==n) return ;
ans++;
return ;
}
int main()
{
//用0-9表示0-9 ,10-15表示A-F
for(int i=0;i<=15;i++){
for(int j=0;j<=15;j++){
for(int k=0;k<=15;k++){
for(int l=0;l<=9;l++){
for(int m=0;m<=9;m++){
for(int n=0;n<=9;n++){
//组成车牌ijk nmn
check(i,j,k,l,m,n);
}
}
}
}
}
}
printf("%d",ans);
return 0;
}