题目来源:第六届蓝桥杯省赛C++B组
算法标签:全排列
题目描述:
观察下面的加法算式:
其中,相同的汉字代表相同的数字,不同的汉字代表不同的数字。
请你填写“三羊献瑞”所代表的4位数字(答案唯一),不要填写任何多余内容。
题目答案:
1085
题目思路:
八个汉字代表不同的数字,只要等式成立即可输出。
且所有的单个数字由题目自然限定为0-9,则我们用数组做出表达式之后使用全排列即可。
题目代码:
#include <iostream>
#include <algorithm>
using namespace std;
int a[10];
int main()
{
for (int i = 0; i < 10; i++)a[i] = i;
do
{
if (!a[0] || !a[4])continue;//祥、三不能为0
int t1 = a[0] * 1000 + a[1] * 100 + a[2] * 10 + a[3];//祥瑞生辉
int t2 = a[4] * 1000 + a[5] * 100 + a[6] * 10 + a[1];//三羊献瑞
int t3 = a[4] * 10000 + a[5] * 1000 + a[2] * 100 + a[1] * 10 + a[7];//三羊生瑞气
if (t1 + t2 == t3)
{
cout << t2;
break;
}
} while (next_permutation(a, a + 10));
return 0;
}