C++写的无限嵌套循环(全排列组合)

C++写的无限循环代码

	const int l = 3;
	int  aa[] = { 1, 2, 3, 5, 7, 9, 11, 13, 15 }, bb[l] = { 0 }, g = l, d = sizeof(aa) / sizeof(aa[0]);

	while (bb[0] < d)
	{
		while (--g)//无限嵌套逐级运算
		if (g > 0 && bb[g] >= d)
		{
			bb[g] = 0;
			++bb[g - 1];
			std::cout << endl;//附加的显示部分
		}
		if (bb[l - 1] < d)//显示部分没写循环
		{
			std::cout << aa[bb[0]] << "+" << aa[bb[1]] << "+" << aa[bb[2]] << "=" << aa[bb[0]] + aa[bb[1]] + aa[bb[2]] << "; ";
			if (aa[bb[0]] + aa[bb[1]] + aa[bb[2]] == 30)break;
		}
		++bb[l - 1];
		g = l;
	}

原来的嵌套循环写法



	int aa[] = { 1, 2, 3, 5, 7, 9, 11, 13, 15 }, a = 0, b = 0, c = 0, d = sizeof(aa) / sizeof(aa[0]);

	while (a < d)
	{
		std::cout << aa[a] << "+" << aa[b] << "+" << aa[c] << "=" << aa[a] + aa[b] + aa[c] << "; ";
		if (aa[a] + aa[b] + aa[c] == 30)
		{
			std::cout << aa[a] << aa[b] << aa[c] << "^_^";
			break;
		}
		if (++c >= d)
		{ 
			++b;
			c = 0;
			std::cout << endl;
		}
		if (b >= d)
		{ 
			++a;
			b = 0;
		}
	}

检查唯一性。

	/**/const int l = 3;
	int  aa[] = { 1, 3, 5, 7, 9, 11, 13, 15 }, bb[l] = { 0 }, g = l, j = 0, t = 0, d = sizeof(aa) / sizeof(aa[0]);
	while (bb[0] < d)
	{
		while (--g)//无限嵌套逐级运算
		{
			if (g > 0 && bb[g] >= d)
			{
				bb[g] = 0;
				++bb[g - 1];
				g = l;//检查唯一序
				std::cout << endl;//附加的显示部分
			}
			j = 0;//检查唯一序
			while (!t && j < g) if (bb[j] == bb[g]) t = 1; else ++j;
		}
		if (!t && bb[l - 1] < d && bb[0] < d)//计算与显示部分没写循环
		{
			std::cout << aa[bb[0]] << "+" << aa[bb[1]] << "+" << aa[bb[2]] << "=" << aa[bb[0]] + aa[bb[1]] + aa[bb[2]] << "; ";
			if (aa[bb[0]] + aa[bb[1]] + aa[bb[2]] == 30)break;
		}
		++bb[l - 1];
		j = t = 0;
		g = l;
	}

全面循环代码

	/**/const int 数量 = 8;
	int  数据[] = { 1, 3, 5, 7, 9, 11, 13, 15 }, 嵌套[数量] = { 0 }, 逐级 = 数量, 检查 = 0, 状态 = 0, 长度 = sizeof(数据) / sizeof(数据[0]);
	while (嵌套[0] < 长度)
	{
		while (--逐级)//无限嵌套逐级运算
		{
			if (逐级 > 0 && 嵌套[逐级] >= 长度)
			{
				嵌套[逐级] = 0;
				++嵌套[逐级 - 1];
				逐级 = 数量;//检查唯一序
				//std::cout << endl;附加的显示部分
			}
			检查 = 0;//检查唯一序
			while (!状态 && 检查 < 逐级) if (嵌套[检查] == 嵌套[逐级]) 状态 = 1; else ++检查;
		}
		if (!状态 && 嵌套[数量 - 1] < 长度 && 嵌套[0] < 长度)//计算与显示部分没写循环
		{
			检查 = 0;//重复利用的变量
			while (逐级 < 数量)
			{
				检查 += 数据[嵌套[逐级]];
				std::cout << (数据[嵌套[逐级]] > 9 ? "" : "0") << 数据[嵌套[逐级]] << (逐级 >= 数量 - 1 ? " = " : "+");
				++逐级;
			}
			std::cout << (检查 > 9 ? "" : "0") << 检查 << "; ";
			//if (检查 == 30)break;
		}
		++嵌套[数量 - 1];
		检查 = 状态 = 0;
		逐级 = 数量;
	}

运行实例

另外答复了提问https://bbs.csdn.net/topics/392520005

	int 数据[] = { 1, 2, 3, 5, 7, 9, 11, 13, 15 }, 长度 = sizeof(数据) / sizeof(数据[0]),
		嵌套[sizeof(数据) / sizeof(数据[0])] = { 0 }, 逐级 = 长度, 检查 = 0, 状态 = 0,
		最大值 = 0, 取值 = 0;
	while (嵌套[0] < 长度)
	{
		while (--逐级)//无限嵌套逐级运算
		{
			if (逐级 > 0 && 嵌套[逐级] >= 长度)
			{
				嵌套[逐级] = 0;
				++嵌套[逐级 - 1];
				逐级 = 长度;
				//std::cout << endl;附加的显示部分
			}
			检查 = 0;//检查唯一序
			while (!状态 && 检查 < 逐级) if (嵌套[检查] == 嵌套[逐级]) 状态 = 1; else ++检查;
		}
		if (!状态 && 嵌套[长度 - 1] < 长度 && 嵌套[0] < 长度)//计算与显示部分
		{
			检查 = 0;//重复利用的变量
			while (逐级 < 长度)
			{
				if (检查 == 0)检查 += 数据[嵌套[逐级]];
				else 
				{
					取值 = 数据[嵌套[逐级]];
					while (取值) { 检查 *= 10; 取值 /= 10; }
					检查 += 数据[嵌套[逐级]];
				}
				if (最大值 < 检查)最大值 = 检查;
				//std::cout << (数据[嵌套[逐级]] > 9 ? "" : "0") << 数据[嵌套[逐级]] << (逐级 >= 长度 - 1 ? " = " : "+");
				++逐级;
			}
			//std::cout << (检查 > 9 ? "" : "0") << 检查 << "; ";
		}
		++嵌套[长度 - 1];
		检查 = 状态 = 0;
		逐级 = 长度;
	}std::cout << 最大值;

 

 

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值