題目描述:
福爾摩斯到某古堡探險,看到門上寫著乙個奇怪的算式:
abcde * ? = edcba
他對華生說:「abcde應該代表不同的數字,問號也代表某個數字!」
華生:「我猜也是!」
於是,兩人沉默了好久,還是沒有算出合適的結果來。
請你利用計算機的優勢,找到破解的答案。
把 abcde 所代表的數字寫出來。
答案寫在「解答.txt」中,不要寫在這裡!
演算法思路:
該題目是典型的使用遞迴解決的問題,可以直接套用遞迴演算法的模式,即:進行若干層遞迴,並對每層的結果進行判斷,如果不符合條件則推出遞迴,符合條件則進入下一層遞迴,直到滿足遞迴終止條件,然後對最後的結果進行判斷。
對於本題目,是進行了5層遞迴,然後分別對每層遞迴判斷時候與前面的數值相等,如果相等就停止遞迴,不相等則進入下一層遞迴,直到結束了第五層遞迴,然後判斷是否滿足abcde * ? = edcba;
我們設num1=abcde,num2=edcba,我們可以對?從1~9進行遍歷,以判斷時候滿足num1*?=num2,但是這樣要進行9次運算,我們可以換個思路,?=num2/num1 ,也就是num1可以被num2整除(餘數為0)並且,num2/num1的結果是乙個小於10的數。
程式**:
#includeusing namespace std;
bool check(int *a,int n)//檢查是有重複的數字
void next(int *a,int n)//判斷時候滿足abcde * ? = edcba
{ int num1 = a[0]*10000+a[1]*1000+a[2]*100+a[3]*10+a[4];//num1=abcde
int num2 = a[4]*10000+a[3]*1000+a[2]*100+a[1]*10+a[0];//num2=edcba
if(num2%num1==0&&num2/num1<10)cout<
輸出結果:
21978
古堡算式 藍橋杯
這是2012年藍橋杯全國軟體設計大預賽第2題,問題是求出字母對應的數字。福爾摩斯到某古堡探險,看到門上寫著乙個奇怪的算式 abcde edcba 他對華生說 abcde應該代表不同的數字,問號也代表某個數字!華生 我猜也是!於是,兩人沉默了好久,還是沒有算出合適的結果來。請你利用計算機的優勢,找到破...
藍橋杯歷屆 古堡算式
福爾摩斯到某古堡探險,看到門上寫著乙個奇怪的算式 abcde edcba他對華生說 abcde應該代表不同的數字,問號也代表某個數字!華生 我猜也是!於是,兩人沉默了好久,還是沒有算出合適的結果來。請你利用計算機的優勢,找到破解的答案。把 abcde 所代表的數字寫出來。答案寫在 解答.txt 中,...
2012 藍橋杯 初賽試題 大數乘法
大數乘法 對於32 位字長的機器,大約超過 20億,用 int型別就無法表示了,我們可以選擇 int64 型別,但無論怎樣擴充套件,固定的整數型別總是有表達的極限!如果對超級大整數進行精確運算呢?乙個簡單的辦法是 僅僅使用現有型別,但是把大整數的運算化解為若干小整數的運算,即所謂 分塊法 如圖 1....