蓝桥秘密冲刺计划(9.24)三羊献瑞

  • 定位:2015年第六届蓝桥杯省赛C/C++ B组试题C
  • 原题:三羊献瑞
    观察下面的加法算式:
      祥 瑞 生 辉
  +   三 羊 献 瑞
-------------------
   三 羊 生 瑞 气

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

  • 属性:枚举
  • 难度:破壳
  • 独白:
    第一眼看到这题的时候,我蒙了,这是啥子玩意???
    我们冷静分析发现,这里使用汉字序列相加得到新的汉字序列就是在唬人,我们不要被汉字相加这样的陌生形式所吓倒,我们可以转化一下,将汉字转化为字母,这样就会好很多了。转化为字母时,我们得到了这样的一组加法算式(这里我们依次对汉字附上字母表示,a~h):
     e d g f
  +  a b c d
-------------------
  a  b g d h

在得到这样一组加法算式后,我们就可以看清这题的本质了,其实就是循环枚举每位上的数字就可以得到答案的,依据题目我们来进行模拟,将模拟表达式(即这一组字母加法算式)代入循环判断条件,然后满足每个字母所代表的数字不相同就可以了,当然这里a和e可以直接判断不可能为0,即从1开始枚举就可以了。(1085

  • 代码:
//#include<bits/stdc++.h>
#include<iostream>
#include<cstdio> 
#include<algorithm> 
using namespace std;  

int main(){
	for(int a=1;a<=9;a++){
		for(int b=0;b<=9;b++){
			for(int c=0;c<=9;c++){
				for(int d=0;d<=9;d++){
					for(int e=1;e<=9;e++){
						for(int f=0;f<=9;f++){
							for(int g=0;g<=9;g++){
								for(int h=0;h<=9;h++){
									if(((e*1000+d*100+g*10+f)+(a*1000+b*100+c*10+d)==(a*10000+b*1000+g*100+d*10+h))&&!(a==b||a==c||a==d||a==e||a==f||a==g||a==h||b==c||b==d||b==e||b==f||b==g||b==h||c==d||c==f||c==e||c==f||c==g||c==h||d==e||d==f||d==g||d==h||e==f||e==g||e==h||f==g||f==h||g==h)){
										cout<<a<<b<<c<<d<<endl;
										cout<<e<<d<<g<<f<<endl;
										cout<<a<<b<<g<<d<<h;
										return 0;
									}
								}
							}
						}
					}
				}
			}
		}
	}
}
  • 总结:转化问题的表观模型,将问题本质化为我们所熟悉的模型。
  • 感悟:不可一叶障目,要看得见眼前的树叶,更要看得见远方的森林。
  • 归档:已归档。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值