close
題目:左邊一排字母不為0,試解出字母代表的數字。
SEND
+ MORE
------------
MONEY
解法:
1.從最左邊開始看,S,M最大值為9+9=18,所以最多會進一位,
由此可知M=1,S+1要進位所以S=9,O=0。
2.知道了S,M,O三個字母數字,可以讓程式少跑很多迴圈,加速運算的速度。
程式:
#include<stdio.h> int main(void) { long D,E,N,R,Y,S=9,M=1,O=0; long MONEY,SEND,MORE; long sum; printf("\n數值字謎\n"); printf("\n SEND"); printf("\n+ MORE"); printf("\n--------"); printf("\n MONEY\n"); for(D=2;D<=8;D++) for(E=2;E<=8;E++) if(D!=E) for(N=2;N<=8;N++) if(N!=E && N!=D) for(R=2;R<=8;R++) if(R!=N && R!=E && R!=D) for(Y=2;Y<=8;Y++) if(Y!=R && Y!=N && Y!=E && Y!=D) { MONEY=(((M*10+O)*10+N)*10+E)*10+Y; SEND=((S*10+E)*10+N)*10+D; MORE=((M*10+O)*10+R)*10+E; sum=SEND+MORE; if(sum==MONEY) { printf("\n\n答案為: \n"); printf("\n %8ld", SEND); printf("\n+%8ld", MORE); printf("\n---------"); printf("\n %8ld", MONEY); } } }
參考資料:名題精選百則
文章標籤
全站熱搜
留言列表