2012藍橋杯 初賽試題 古堡算式

2022-08-30 15:48:15 字數 987 閱讀 8702

題目描述:

福爾摩斯到某古堡探險,看到門上寫著乙個奇怪的算式:

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....