題目:左邊一排字母不為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);
}
}
}
參考資料:名題精選百則
文章標籤
全站熱搜
