赞
踩
【题目描述】
有如下的加法算式。其中每个汉字代表一个数字。 (如存在对齐问题,可参见【图1.png】) 年 大年 过大年 能过大年 怎能过大年 我怎能过大年 + 让我怎能过大年 ------------------ 能能能能能能能 请填写“让我怎能过大年” 所代表的整数。 所有数字连在一起,中间不要空格。例如:"3125697"。当然,这个不是正确的答案。 注意:只填写一个整数,不要填写任何多余的内容。
【解析】
观察加和的值不难发现规律:上面的一串数字是下面数字的一部分。
abcdefg%1000000=bcedfg
bcdefg%100000=cdefg
cdefg%10000=defg
defg%1000=efg
efg%100=fg
fg%10=g
因此只需要使用DFS枚举abcdefg即可。对于每个位置,依次尝试填入0–9,如果填到了最后一层,判断枚举出来的值是否满足条件,如果满足即可输出。
【代码】
#include<iostream> #include<cstdio> #include<string> #include<cstring> #include<algorithm> #include<map> #include<set> #include<sstream> #include<vector> using namespace std; const int maxn = 100 + 10; int a[maxn], vis[maxn], tt = 0; void dfs(int cur) { if (cur == 7) { int cnt = a[3] * 1111111; int t = 0; for (int i = 0;i < 7;i++) { t *= 10; t += a[i]; } int a1 = t % 10, a2 = t % 100, a3 = t % 1000, a4 = t % 10000, a5 = t % 100000, a6 = t % 1000000; if ((a1 + a2 + a3 + a4 + a5 + a6 + t) == cnt) { for (int i = 0;i < 7;i++) cout << a[i]; cout << endl; } } else for (int i = 0;i <= 9;i++) //尝试把i放入a[cur] { if (!vis[i]) { vis[i] = 1; a[cur] = i; dfs(cur + 1); a[cur] = 0; vis[i] = 0; } } } int main() { dfs(0); return 0; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。