三羊献瑞+祥瑞生辉(15年蓝桥杯)
来源:互联网 发布:淘宝盒子流量真实吗 编辑:程序博客网 时间:2024/04/28 22:21
2015年蓝桥杯JavaB组第3题
三羊献瑞
观察下面的加法算式:
祥 瑞 生 辉
+ 三 羊 献 瑞
-------------------
三 羊 生 瑞 气
(如果有对齐问题,可以参看【图1.jpg】)
其中,相同的汉字代表相同的数字,不同的汉字代表不同的数字。
请你填写“三羊献瑞”所代表的4位数字(答案唯一),不要填写任何多余内容。
感觉这种题以前学奥数时见过类似的,不过可没这么多不同的汉字,这完全可以作为奥数题出。
做完这道题后,在网上查了查,见到的都是纯粹暴搜,设置8个变量从0到9。然而我自己的解题思路感觉还好,写出来分享下。
首先进行数学分析:
1.四位数加四位数得到五位数,那么这个五位数的万为必为 1 ,即三为 1 。
2.相加时,百位向千位进数,只能是 0 / 1 ,可得:祥 + 1 +0/1 = 10 + 羊。
本人数学不是很好,所以数学分析就到这一步了。但这个算式还可以在分析。
祥 瑞 献 辉
+ 三 羊 生 瑞
-------------------
三 羊 生 瑞 气
把 “生” 和 “献” 调换位置,这样不影响结果,设 “三羊生瑞” 为 X ,“祥瑞献辉” 为 Y ,(PS:这两个词感觉怪怪的),那么就有 X+Y+0 <= 10*X <= X+Y+9(谁知道那个“气”是几,但是其必定大于等于0、小于等于9),转换一下就是 Y = 10 * X + (0,,1,2,3...),即 Y = 9&#¥。可得“祥”为 9 。 9 + 1 在 进数为 0/1 的情况下结果为 10/11,但 1 已经被“三”占用了,“羊”只能为 0 。
综上所述:1023<=X<=1987 && Y<10000 ,再加上题中“相同的汉字代表相同的数字,不同的汉字代表不同的数字”的约束条件, 剩下的就交给电脑跑循环吧。
import java.util.*;public class Main {/* * 该题的这种做法,涉及对字符串的处理,建议使用正则表达式 * 或者将 x 和 y 拆分成8个数字进行筛选 */ public static void main(String[] args) { int x, y; for( x=1023; x<1987; x++){ for( y=x*9; y<=(x*9+9) && y<10000; y++){ if( x%10 == y/100%10 && (x+y)/10%10 == x%10 && y/1000 != y%1000/100 && y/1000 != y%100/10 && y/1000 != y%10 && y%100/10 != y%10 && x%1000/100 != x%100/10 && x%100/10 != x%10 && x%100/100 != x%10){ System.out.println(x + " " + y); } } }}}
最后,输出的跟题意有些矛盾,毕竟我修改了原数,而且我没有在代码里进行筛选,而是在输出后人工筛选,毕竟还不会正则。希望大家提出更好的算法。
- 三羊献瑞+祥瑞生辉(15年蓝桥杯)
- 蓝桥杯—三羊献瑞,祥瑞生辉+三羊献瑞
- 听孔祥瑞报告的感触
- 中国古代兵器与兵书·铜兵生辉
- Databricks孟祥瑞:ALS 在 Spark MLlib 中的实现
- Pine Trail 平台支持,Samsung N210, N220, N150, N127和NB30上网本熠熠生辉
- 2015年蓝桥杯C/C++组B组第三题:三羊献瑞
- 三羊献瑞(递归求解)
- 三羊献瑞
- 三羊献瑞
- 三羊献瑞
- 三羊献瑞
- 三羊献瑞
- 三羊献瑞
- 三羊献瑞
- 三羊献瑞
- 三羊献瑞
- 三羊献瑞
- (四)如何输出运算后的数字
- hdu 1247
- QT中QTabWidget的使用
- 什么是框架(包括前端框架和后端框架)
- ajax之同步请求
- 三羊献瑞+祥瑞生辉(15年蓝桥杯)
- 解决OpenGL在MFC下的闪烁问题
- 信号与系统相关
- 在android studio中配置百度地图
- android 自定义view 流式布局
- C++文件读写详解(ofstream,ifstream,fstream)
- 戴尔PowerEdge R730 机架式服务器安装 Ubuntu 14.04.3 LTS
- NSURLSession
- 信息摘要工具类-MD5、CRC32、SHA1