奥数等式:暴力穷举法

奥数等式:暴力穷举法
abc+def=hig 将数字1~9分别填入,每个数字只能使用一次使得等式成立。例如784+152=936就是一个合理
的组合,请问一共有多少种合理的组合?注意784+152=936和152+784=459是同一种组合。

根据枚举思想我们只需要枚举每一位上所有可能的数就好了。用一个flag数组来标记解决互不相等的问题。

#include<iostream>
using namespace std;
int main()
{
	int num[10],total=0,flag[10],sum;
	for(num[1]=1;num[1]<=9;num[1]++)
		for(num[2]=1;num[2]<=9;num[2]++)
			for(num[3]=1;num[3]<=9;num[3]++)
				for(num[4]=1;num[4]<=9;num[4]++)
					for(num[5]=1;num[5]<=9;num[5]++)
						for(num[6]=1;num[6]<=9;num[6]++)
							for(num[7]=1;num[7]<=9;num[7]++)
								for(num[8]=1;num[8]<=9;num[8]++)
									for(num[9]=1;num[9]<=9;num[9]++)
									{
										for (int i=1;i<=9;i++)
										{
											flag[i]=0;
										}
										for (i=1;i<=9;i++)
										{
											if (flag[num[i]]==1)
											{
												break;
											}
											else
											{
												flag[num[i]]=1;
											}
										}
										sum=0;
										for (i=1;i<=9;i++)
										{
											sum+=flag[i];
										}
										if (sum==9&&(num[1]*100+num[2]*10+num[3]+num[4]*100+num[5]*10+num[6]==num[7]*100+num[8]*10+num[9]))
										{
											total++;
											cout<<num[1]<<num[2]<<num[3]<<"+"<<num[4]<<num[5]<<num[6]<<"="<<num[7]<<num[8]<<num[9]<<endl;
										}
									}
		cout<<total/2<<endl;

}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值