蓝桥杯第六届省赛之三羊献瑞
三羊献瑞
观察下面的加法算式:
其中,相同的汉字代表相同的数字,不同的汉字代表不同的数字。
请你填写“三羊献瑞”所代表的4位数字(答案唯一),不要填写任何多余内容。
首先由这个加法算式的有进位我们可以知道三:1,同时祥:9,羊:0。同时瑞+羊=生,那么生+献必定产生进位,那么瑞+1=生,生+献=瑞->瑞+1+献=瑞+10->1+瑞=10这必然是不可能的,因为这样瑞=9而祥也等于9,那么必然辉+瑞产生了进位导致生+献=瑞->瑞+1+献+1=瑞+10->1+瑞=10->献=8。
在知道了这几个汉字所代表的数字之后,我们在用枚举法进行解题就简单多了。
#include <iostream>
using namespace std;
int main()
{
int x,y,z,a,b,c;
for(x=2;x<7;x++)
{
for(y=2;y<=7;y++)
{
if(x==y)
continue;
for(z=2;z<=3;z++)
{
if(z==y || z==x)
continue;
a = 9000+x*100+(x+1)*10+y;
b = 1080+x;
c = 10000+(x+1)*100+x*10+z;
if(a+b == c && x+1!=y)
{
cout<<b<<endl;
}
}
}
}
return 0;
}
/*
1,因为是加法算式三是进位出来的 所以是三是1
2,因为三是1且三加祥能进位,只有1+9能进位,所以祥是9
但是考虑可能有进位的情况祥可能为8或9 *
⑴,当祥为8时8+1+1(进位的1)=10 这时羊只能为0 而0+任何1~9数均<10 不可能进位 ——不成立
⑵,当祥为9时9+1+1(进位的1)=1,羊为1 因为三为1 所以羊不为1 ——不成立
综上得到三为1 祥为9 所以羊为0
3,瑞+0=生只能是后面进位了,得到瑞+1等于生。
又有生+献=瑞 即 瑞+1+献=瑞 即 1+献=0
(到这可能有些不明白,解释下,这又是因为后位进1导致1+献=0 应为 1+献+1(进位的1)=0 即献=8)
此时设瑞=x,辉=y,气=z。
这时所有的数的关系如下
这时从x开始试数,1,0已经有了 从2开始试数
x=2时 x+y>=10,y>=8 而8,9已经存在—— 不成立
x=3时 x+y>=10,y>=7 8,9已经存在 也只能为7,但 x+y=3+7+10 z应为0 因0已经存在—— 不成立
x=4时 x+y>=10,y>=6 8,9已经存在 y可为6,7 当为6时z=0—— 不成立 当为7时 z=1 不成立
x=5时 x+y>=10,y>=5 8,9已经存在 y为7时 z为2 此时总式成立
所以得出结果为 9567+1085=10652
得出三样献瑞 为1085 */
答案:1085
最后分享一下我在做算法练习和OJ刷题时常常提醒自己的一句话:做算法题的练习过程总是比结果重要,要一步一步的在自己的想法上去进行优化,去体味思考的过程,思考的方式和方法永远处于学习过程中的绝巅。