本文主要是介绍2015年蓝桥杯---省赛B组C题---三羊献瑞,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
三羊献瑞
题目描述:
观察下面的加法算式:
祥 瑞 生 辉
+ 三 羊 献 瑞
---------------三 羊 生 瑞 气
其中,相同的汉字代表相同的数字,不同的汉字代表不同的数字。
请你填写“三羊献瑞”所代表的4位数字(答案唯一),不要填写任何多余内容。
分析:
看到题目先8个for循环,这样倒也可以,毕竟是填空题吗,但是这里先分析一下题目,可以直接推出其中三个汉字的真实值,这样循环次数就降低了1000倍;
注意,是两个四位数相加的一个五位数,所以‘三’只能为1;
接着分析,由于‘三’+‘祥’+进位=‘三’*10+‘羊’;
而‘三’已经位1了,所以如果产生进位,则‘祥’只能为8或9;
1.如果‘祥’为8,则进位必须为1,且‘羊’为0,再看第三位相加,‘羊’为0,还必须产生进位,所以‘瑞’必须9,且‘生’为0,这就冲突了,‘羊’和‘生’同时为0,故起始条件‘祥’不能是8;
所以的‘祥’只能为9;
故‘祥’+‘三’+进位=9+1+进位=10+进位;
故‘羊’只能是0或1,而‘三’已经是1,所以‘羊’只能是0;
故得结论:
三=1
羊=0
祥=9
接下来5个for就行了;
code:
#include<stdio.h>
#include<set>using namespace std;
int main()
{int xiang,rui,sheng,hui,san,yang,xian,qi;san=1;yang=0;xiang=9;for(rui=0;rui<=9;rui++){for(sheng=0;sheng<=9;sheng++){for(hui=0;hui<=9;hui++){for(xian=0;xian<=9;xian++){for(qi=0;qi<=9;qi++){int num1=xiang*1000+rui*100+sheng*10+hui;int num2=san*1000+yang*100+xian*10+rui;int num3=san*10000+yang*1000+sheng*100+rui*10+qi;set<int> s;s.insert(xiang);s.insert(rui);s.insert(sheng);s.insert(hui);s.insert(san);s.insert(yang);s.insert(xian);s.insert(qi);if(s.size()==8&&num1+num2==num3&&num1!=0&&num2!=0&&num3!=0){printf("\n%d%d%d%d",san,yang,xian,rui);return 0;}}}}}}
}
ans:
1085
这篇关于2015年蓝桥杯---省赛B组C题---三羊献瑞的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!