回文數(藍橋杯)

2021-09-05 10:27:16 字數 1552 閱讀 4410

若乙個數(首位不為零)從左向右讀與從右向左讀都一樣,我們就將其稱之為回文數。

例如:給定乙個10進製數56,將56加65(即把56從右向左讀),得到121是乙個回文數。

又如:對於10進製數87:

step1:87+78 = 165 step2:165+561 = 726

step3:726+627 = 1353 step4:1353+3531 = 4884

在這裡的一步是指進行了一次n進製的加法,上例最少用了4步得到回文數4884。

寫乙個程式,給定乙個n(2<=n<=10或n=16)進製數m(其中16進製制數字為0-9與a-f),求最少經過幾步可以得到回文數。

如果在30步以內(包含30步)不可能得到回文數,則輸出「impossible!」

輸入格式

兩行,n與m

輸出格式

如果能在30步以內得到回文數,輸出「step=xx」(不含引號),其中xx是步數;否則輸出一行」impossible!」(不含引號)

樣例輸入987

樣例輸出

step=6

用陣列來儲存數,每乙個元素代表一位,不管是多少進製,將陣列元素統一轉為十進位制,用來表示每一位上的數字。相加後依次判斷是否有進製,處理進製後判斷是否為回文數,迴圈此過程即可

2 10011 step=4

16 ac27 step=6

10 89 step=24

2 101111 impossible!

進製是時常將mm[i + 1] += mm[i] / n;寫成mm[i + 1] = mm[i] / n;導致錯誤

在將16位轉為十進位制數時只考慮到了字母的情況,直接統一減了『7』導致錯誤

#define _crt_secure_no_warnings 1

#include#includeint mm[100] = ;

int len;

int panduan()

} return t;

}int zhuan(int n)

; int i;

for (i = 0; i < len; i++)

b[i] = mm[len - 1 - i];

for (i = 0; i < len; i++)

mm[i] += b[i];

for (i = 0; i < len; i++) }

if (panduan() == 1)

return 1;

else

return 0;

}int main()

} else }

for (i = 0; i < 30; i++)

if (i < 30)

printf("step=%d\n", i + 1);

else

printf("impossible!\n");

return 0;

}

一定要注意細節啊,陣列沒有初始化有時候就能導致嚴重錯誤!!!

藍橋杯 回文數

問題描述 1221是乙個非常特殊的數,它從左邊讀和從右邊讀是一樣的,程式設計求所有這樣的四位十進位制數。輸出格式 按從小到大的順序輸出滿足條件的四位十進位制數。回文數判定模板 bool ishws int num return ans num include include include incl...

藍橋杯 回文數(模擬)

演算法訓練 回文數 時間限制 1.0s 記憶體限制 256.0mb 問題描述 若乙個數 首位不為零 從左向右讀與從右向左讀都一樣,我們就將其稱之為回文數。例如 給定乙個10進製數56,將56加65 即把56從右向左讀 得到121是乙個回文數。又如 對於10進製數87 step1 87 78 165 ...

藍橋杯特殊回文數

基礎練習 特殊回文數 時間限制 1.0s 記憶體限制 512.0mb 問題描述 123321是乙個非常特殊的數,它從左邊讀和從右邊讀是一樣的。輸入乙個正整數n,程式設計求所有這樣的五位和六位十進位制數,滿足各位數字之和等於n 輸入格式 輸入一行,包含乙個正整數n。輸出格式 按從小到大的順序輸出滿足條...