暴力
//输出所有6位幸运数
//幸运数是全部由7或4组成的数
#include <bits/stdc++.h>
using namespace std;
int main()
{
int s[100] = { 4 , 7 , 0 , 0 };
for ( int l = 0 ; l < 6 ; l++ )
for ( int k = 0 ; k < 6 ; k++ )
for ( int i = 0 ; i < 6 ; i++ )
for ( int j = 0 ; j < 6 ; j++ )
for ( int z = 0 ; z < 6 ; z++ )
for ( int x = 0 ; x < 6 ; x++ )
if ( l != 5 && k != 5 && i != 5 && j != 5 && z != 5 && x != 5 && l != 4 && k != 4 && i != 4 && j != 4 && z != 4 && x != 4 && l != 3 && k != 3 && i != 3 && j != 3 && z != 3 && x != 3 && l != 2 && k != 2 && i != 2 && j != 2 && z != 2 && x != 2 )
printf("%d %d %d %d %d %d \n" , s[l] , s[k] , s[i] , s[j] , s[z] , s[x]);
return 0;
}
DFS,深度优先搜索
//幸运数正解
#include <bits/stdc++.h>
using namespace std;
int a[10] , n , book[10];
void dfs ( int step )
{
int i;
if ( step == n + 1 ) //数组赋值完了执行
{
for ( int k = 1 ; k <= n ; k++ ) //备份数组,因为后面要改值
book[k] = a[k];
if ( a[1] != 6 && a[2] != 6 && a[3] != 6 && a[4] != 6 && a[5] != 6 && a[6] != 6 && a[1] != 5 && a[2] != 5 && a[3] != 5 && a[4] != 5 && a[5] != 5 && a[6] != 5 && a[1] != 4 && a[2] != 4 && a[3] != 4 && a[4] != 4 && a[5] != 4 && a[6] != 4 && a[1] != 3 && a[2] != 3 && a[3] != 3 && a[4] != 3 && a[5] != 3 && a[6] != 3 ) //判断各位不重复
{
for ( int j = 1 ; j <= n ; j++ )
{
if ( a[j] == 1 )
a[j] = 4;
if ( a[j] == 2 )
a[j] = 7;
} //将数组变为幸运数数组
for ( i = 1 ; i <= n ; i++ )
printf("%d" , a[i]); //输出
printf("\n");
}
for ( int l = 1 ; l <= n ; l++ )
a[l] = book[l]; //把备份取回来
return; //返回上一次被调用的地方
}
for ( i = 1 ; i <= n ; i++ ) //给数组赋值
{
a[step] = i; //赋值第一位
dfs(step + 1); //复制下一位
}
return; //当赋值完成后返回上一位
}
int main()
{
printf("4\n7\n");
for ( int i = 2 ; i <= 6 ; i++ )
{
n = i;
dfs(1);
}
return 0;
}