和我一起从0学算法(C语言版)(三)

第二章 暴力求解(枚举法)

第一节 小学奥数题—程序求解

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

三 羊 生 瑞 气
其中,相同的汉字代表相同的数字,不同的汉字代表不同的数字,且“三”字不为 0 。

请计算所有的汉字代表什么意思。

这是一道经典的小学奥数题,相信有不少同学曾经遇到过类似的题目,如果单纯的笔算将花费大量的时间,而暴力求解则可以利用计算机快速得出结果。而且不需要思考任何数字的可能值。

给出代码,大家自己体会:

#include<stdio.h>
int main() {
   int a,b,c,d,e,f,g,h; // 由a-h分别代表汉字:祥 瑞 生 辉 三 羊 献 气 
       for(a=0;a<10;a++) {
       for(b=0;b<10;b++) {
       for(c=0;c<10;c++) {
       for(d=0;d<10;d++) {
       for(e=1;e<10;e++) { // e 代表汉字 “三 ”,其不为 0 ,所以初始化为 1 
       for(f=0;f<10;f++) {
       for(g=0;g<10;g++) {
       for(h=0;h<10;h++) {
	   int n = a*1000+b*100+c*10+d;
	   int m = e*1000+f*100+g*10+b;
	   int k = e*10000+f*1000+c*100+b*10+h;
	   int l = n+m;
	   if(k==l && 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!=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) {
	   printf("%d,%d,%d\n",n,m,k);
	   printf("祥=%d,瑞=%d,生=%d,辉=%d,三=%d,羊=%d,献=%d,气=%d\n",a,b,c,d,e,f,g,h); 
	   }}}}}}}}}	
    return 0;
}

暴力题很烦,只给出一道例题,以后如果有好的题,再写出来吧。

附:诗

浣溪沙

——纳兰性德

谁念西风独自凉,萧萧黄叶闭疏窗,沉思往事立残阳。
被酒莫惊春睡重,赌书消得泼茶香,当时只道是寻常。

以上。

posted @ 2017-04-17 16:16  梦想未必轻  阅读(284)  评论(2编辑  收藏  举报