题目来源:蓝桥杯2015初赛 C++ B组C题

题目描述
观察下面的加法算式:

其中,相同的汉字代表相同的数字,不同的汉字代表不同的数字。
请你填写“三羊献瑞”所代表的4位数字(答案唯一),不要填写任何多余内容。

输出格式
请你填写“三羊献瑞”所代表的4位数字(答案唯一),不要填写任何多余内容。

问题分析
方法一:枚举各位数字
对于10进制的某一位数字x和y,因为x,y≤9,得x+y≤18,即进位为1,也可以说2个10进制数做加法运算,进位最多为1。
根据题目给定的竖式,其中三必然为1。
设"三羊献瑞"=“abcd”,其中的a、b、c和d为10进制数字,那么a=1;可以设"祥瑞生辉"=“edfg”;也可以设“三羊生瑞气”=“abfdh”。
因为a=1,那么e只能是8或9,其他各个数字则为0-9,枚举计算一下。
方法二:枚举2个数的各位数字
枚举"三羊献瑞"="abcd"和“三羊生瑞气”=“abfdh”,再做判定。这个方法可以减少枚举组合数量,判定条件略微复杂。
方法三:DFS
用深度优先搜索来枚举也是一种有效的方法。
方法四:置换
使用置换来枚举也是一种程序代码简洁的方法。

AC的C语言程序(枚举各位数字)如下:

/* LQ0023 三羊献瑞 */#include <stdio.h>
#include <stdlib.h>int main()
{int a = 1, b, c, d, e, f, g, h, ans;for (b = 0; b <= 9; b++)if (b != a)for (c = 0; c <= 9; c++)if (c != a && c != b)for (d = 0; d <= 9; d++)if (d != a && d != b && d != c)for (e = 8; e <= 9; e++)if (e != b && e != c && e != d)for (f = 0; f <= 9; f++)if (f != a && f != b && f != c && f != d && f != e)for (g = 0; g <= 9; g++)if (g != a && g != b && g != c && g != d && g != e && g != f)for (h = 0; h <= 9; h++) {if (h != a && h != b && h != c && h != d && h != e && h != f && h != g)if ((ans = a * 1000 + b * 100 + c * 10 + d) +(e * 1000 + d * 100 + f * 10 + g) ==(a * 10000 + b * 1000 + f * 100 + d * 10 + h)) {printf("%d\n", ans);exit(0);}}return 0;
}

AC的C语言程序(枚举2个数的各位数字)如下:

/* LQ0023 三羊献瑞 */#include <stdio.h>
#include <stdlib.h>int main()
{int a = 1, b, c, d, f, h, ans;for (b = 0; b <= 9; b++)if (b != a)for (c = 0; c <= 9; c++)if (c != a && c != b)for (d = 0; d <= 9; d++)if (d != a && d != b && d != c)for (f = 0; f <= 9; f++)if (f != a && f != b && f != c && f != d)for (h = 0; h <= 9; h++)if (h != a && h != b && h != c && h != d && h != f) {ans = a * 1000 + b * 100 + c * 10 + d;int sum = a * 10000 + b * 1000 + f * 100 + d * 10 + h;int t = sum - ans;int e = t / 1000;int g = t % 10;if (e != a && e != b && e != c && e != d && e != f && e != h &&g != a && g != b && g != c && g != d && g != f && g != h &&e != g &&f == t / 10 % 10 && d == t / 100 % 10) {printf("%d\n", ans);exit(0);}}return 0;
}

AC的C语言程序(DFS)如下:

/* LQ0023 三羊献瑞 */#include <stdio.h>
#include <string.h>/* 枚举8个数字 */
int d[8 + 1], vis[10], ans = 0;
/* 三=x[1] 羊=x[2] 献=x[3] 瑞=x[4] 祥=x[5] 辉=x[6] 生=x[7] 气=x[8] */void dfs(int k)
{if (k > 8) {int a = d[5] * 1000 + d[4] * 100 + d[7] * 10 + d[6];int b = d[1] * 1000 + d[2] * 100 + d[3] * 10 + d[4];int sum = d[1] * 10000 + d[2] * 1000 + d[7] * 100 + d[4] * 10 + d[8];if (a + b == sum) ans = b;} else if (ans == 0) {for (int i = 0; i <= 9; i++)if (vis[i] == 0) {d[k] = i;vis[i] = 1;dfs (k + 1);vis[i] = 0;}}
}int main()
{memset(vis, 0, sizeof vis);d[1] = 1, vis[1] = 1;dfs(2);printf("%d\n", ans);return 0;
}

AC的C语言程序(置换)如下:

/* LQ0023 三羊献瑞 */#include <iostream>
#include <algorithm>
using namespace std;int main()
{int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};for (; ;) {if (a[0] != 0 && a[4] != 0) {int sum1 = a[4] * 1000 + a[3] * 100 + a[5] * 10 + a[6];int sum2 = a[0] * 1000 + a[1] * 100 + a[2] * 10 + a[3];int sum = a[0] * 10000 + a[1] * 1000 + a[5] * 100 + a[3] * 10 + a[7];if (sum1 + sum2 == sum) {printf("%d\n", sum2);break;}}next_permutation(a, a +10);}return 0;
}

LQ0023 三羊献瑞【枚举】相关推荐

  1. 蓝桥杯2015初赛-三羊献瑞-枚举

    题目描述 观察下面的加法算式: 其中,相同的汉字代表相同的数字,不同的汉字代表不同的数字. 请你填写"三羊献瑞"所代表的4位数字(答案唯一),不要填写任何多余内容. 输出 请你填写 ...

  2. 2015蓝桥杯省赛---java---B---3(三羊献瑞)

    题目 三羊献瑞 思路分析 由于是填空题,没有时间和内存的要求,所以看到这个题,第一想法就是暴力破解,当然了,怎么快就怎么做. 由于 "三"是数字的首位,低位的数字进位后必然为1,所 ...

  3. 蓝桥杯:三羊献瑞(答案不唯一)

    目录 题目描述 题目分析: 测试用的代码(Java): 答案: 因为我个人做选择题有把所有可能性列举的习惯,所以我习惯性列举一下,发现答案并不像题目里面说的,三羊献瑞是唯一的.具体看我的测试用例 Te ...

  4. 【蓝桥杯】2015初赛 三羊献瑞

    题目描述 观察下面的加法算式: 其中,相同的汉字代表相同的数字,不同的汉字代表不同的数字. 请你填写"三羊献瑞"所代表的4位数字(答案唯一),不要填写任何多余内容. 输出 请你填写 ...

  5. 1259: [蓝桥杯2015初赛]三羊献瑞 C/C++

    题目描述: 观察下面的加法算式: 其中,相同的汉字代表相同的数字,不同的汉字代表不同的数字. 请你填写"三羊献瑞"所代表的4位数字(答案唯一),不要填写任何多余内容. 输出格式: ...

  6. 2015年蓝桥杯c/c++ 第三题 三羊献瑞

    题目: 三羊献瑞 观察下面的加法算式: 祥 瑞 生 辉+ 三 羊 献 瑞 -------------------三 羊 生 瑞 气 (如果有对齐问题,可以参看[图1.jpg]) 其中,相同的汉字代表相 ...

  7. 三羊献瑞(全排列问题)

    题目描述: 三羊献瑞 观察下面的加法算式: 祥 瑞 生 辉+ 三 羊 献 瑞= 三 羊 生 瑞 气 (如果有对齐问题,可以参看[图1.jpg]) 其中,相同的汉字代表相同的数字,不同的汉字代表不同的数 ...

  8. PAT 7 三羊献瑞(dfs)

    三羊献瑞 观察下面的加法算式:   祥 瑞 生 辉 + 三 羊 献 瑞  --------------------------------------------------------------- ...

  9. 三羊献瑞(暴力破解)

    package 计蒜客;public class 三羊献瑞 {/*** @param args*/public static void main(String[] args) {// TODO Aut ...

最新文章

  1. Java中/r和/n的区别
  2. 动态规划应用--最长递增子序列 LeetCode 300
  3. [Android5 系列二] 1. 全实例之控件(Widget)
  4. gitblit如何迁移入gitlab合并迁移_gitlab和gitlab项目迁移
  5. Ubuntu 15.04下安装Docker
  6. R语言单因素分析案例
  7. redigo批量lpush/rpush、批量zrem
  8. Wise Force Deleter(电脑文件强制删除软件)官方中文版V1.5.3.54 | 支持强制删除超大文件夹
  9. 408真题-解析-2014年计算机考研真题解析
  10. 同构网络vs异构网络
  11. ios安装并信任证书
  12. 今天来详细说一说贴片三极管
  13. 如何备战 CCNP 考试
  14. 《英雄联盟》首部成人动画全球爆火,尺度有点大啊!
  15. 下级对上级认可应该用什么词_下级对上级的成语-上级听取下级的词语-下级称赞上级领导的词语...
  16. 关于音乐制作的一些网站
  17. Linux以太网卡软硬件架构
  18. linux杀毒软件clamav,linux杀毒软件-clamav
  19. 函数的闭包,闭包的用途
  20. 《大道至简》的幕后故事(2):“愚公移山记”人物篇 1

热门文章

  1. html实现滑块拖动验证
  2. 对比 iOS 14.5 最强更新功能,Android 系统做得怎么样?
  3. Python爬虫实战,pyecharts模块,Python实现中国地铁数据可视化
  4. matlab7.01安装,win7系统安装matlab7.1的操作方法
  5. 半世浮尘洗铅华,余半生为君温酒煮茶
  6. AGS JS开发自定义贴图图层
  7. Jmeter 压测工具
  8. Linux部署人大金仓(Kingbase8)
  9. BZOJ 4668 冷战(按秩合并并查集+LCA)
  10. 线搜索(line search)方法