【思特奇杯·云上蓝桥-算法训练营】第1周:七星填数

void a(int i,int g[11],bool k[15])
{

			if (i >= 4)
			{
				if (6 + 11 + g[0] + g[1] != 6 + 14 + g[2] + g[3])
				{
					return;
				}
			}
			if (i >= 6&&i<8)
			{
				if (6 + 11 + g[0] + g[1] != g[1] + g[2] + g[4] + g[5])
				{
					return;
				}
			}
			if (i >= 8&&i<10)
			{
				if (6 + 11 + g[0] + g[1] != g[3] + g[4] + g[6] + g[7])
				{
					return;
				}
			}
			if (i >= 10)
			{
				if (6 + 11 + g[0] + g[1] != g[0] + g[5] + g[8] + g[9])
				{
					return;
				}
			}
			if (i == 11)
			{
				if (6 + g[1] + g[0] + 11 == 6 + 14 + g[2] + g[3] 
					&& 6 + g[1] + g[0] + 11 == g[1] + g[2] + g[4] + g[5]
					&& 6 + g[1] + g[0] + 11 == g[3] + g[4] + g[6] + g[7]
					&& 6 + g[1] + g[0] + 11 == g[0] + g[5] + g[8] + g[9]
					&& 6 + g[1] + g[0] + 11 == 11+g[7]+g[10]+g[8]
					&& 6 + g[1] + g[0] + 11==g[6]+g[10]+g[9]+14)
				{
					cout << g[4] << " " << g[2] << " " << g[1] << " " << g[5];
				}
			}

	for(int t=1;t<14;t++)
	{
		if (k[t])
		{
			continue;
		}
		g[i] = t;
		k[t] = 1;
		
			
		
		a(i+1, g, k);
		k[t] = 0;
	}
	g[i] = 0;
	
}

int main()
{
	int g[12] = { 0,0,0,0,0,0,0,0,0,0,0 };
	bool k[15] = { 0,0,0,0,0,0,1,0,0,0,0,1,0,0,1 };
	int i = 0;
	int j = 0;
	a(0, g, k);

}

简单的递归加上微妙的优化就可以快速的运算出结果。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值