数的各种排列组合输出

文章提供了两种C++代码实现,分别通过循环和深度优先搜索(DFS)方法来生成全由7或4组成的6位幸运数。代码首先初始化数组,然后通过遍历和递归的方式检查并打印满足条件的幸运数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 暴力

//输出所有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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值