232
技術社區[雲棲]
2012藍橋杯【初賽試題】古堡算式
題目描述:
福爾摩斯到某古堡探險,看到門上寫著一個奇怪的算式:
ABCDE * ? = EDCBA
他對華生說:“ABCDE應該代表不同的數字,問號也代表某個數字!”
華生:“我猜也是!”
於是,兩人沉默了好久,還是沒有算出合適的結果來。
請你利用計算機的優勢,找到破解的答案。
把 ABCDE 所代表的數字寫出來。
答案寫在“解答.txt”中,不要寫在這裏!
思路:此題乍一看有點摸不著頭腦,其實你仔細看,很多細節都藏在題目裏。比如福爾摩斯說的“ABCDE應該代表不同的數字,問號也代表某個數字”,這就是題目給我們的一個非常重要的信息,即ABCDE是1至9之間不同的數字(不包括0,因為如果0在首位就不滿足五位數),而問號跟簡單,它代表的一定是1到9的某個數字。那麼做題的方法隻需要將1至9取出5個數組合,然後再分別乘以1到9的某個數字看看結果是不是剛好等於第一個數的顛倒數(如12345的顛倒數是54321)即可。
最後找出的正確答案是:21978(21978*4=87912)
#include<stdio.h> #include<stdlib.h> int Change(int a[]) { int i,n=0; for(i=0;i<5;i++) n=n*10+a[i]; return n; } int main() { int i,j,k,l,t,n,m,flag,a[6],b[6]; flag=0; for(i=1;i<=9;i++) { a[0]=i;b[4]=i;if(flag==1)break; for(j=1;j<=9;j++) { a[1]=j;b[3]=j;if(flag==1)break; for(k=1;k<=9;k++) { a[2]=k;b[2]=k;if(flag==1)break; for(l=1;l<=9;l++) { a[3]=l;b[1]=l;if(flag==1)break; for(t=1;t<=9;t++) { a[4]=t;b[0]=t;if(flag==1)break; for(m=2;m<=9;m++) { if(Change(a)*m==Change(b)) { printf("%d*%d=%d\n",Change(a),m,Change(b)); flag=1; } } } } } } } system("pause"); return 0; }
用的方法比較原始,如果求的位數多的話可能會超時,期待更優化的方法
最後更新:2017-04-03 12:55:12