2023年分割槽聯賽普級組之二 回文數

2021-07-11 01:59:02 字數 1964 閱讀 1703

description

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

例如:給定乙個10進製數56,將56加56(即把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,求最少經過幾步可以得到回文數。如果在30步以內(包含30步)不可能得到回文數,則輸出「impossible!」 

input

output

sample input

87

sample output

6

解題思路:

先讀入進製,再已字串的形式讀入,全部轉化為十進位制,再用類似高精度的方法把這個數和它的倒序數相加,如果判斷到該處為回文數,就把當時的迴圈變數輸出,並且結束整個程式,如果三十次都沒用回文數,就輸出

impossible!

即可。

程式:
var 

a,b:array[1..50]of longint;

n,m,t,i,j,k,x,y,ans:longint;

s:string;

begin

readln(n);

readln(s);

t:=length(s);

for i:=1 to t do

if s[i] in ['0'..'9'] then a[t-i+1]:=ord(s[i])-ord('0')

else a[t-i+1]:=ord(s[i])-ord('a')+10;

for ans:=1 to 30 do

begin

for i:=1 to t do

b[i]:=a[i]+a[t-i+1];

for i:=1 to t do

if b[i]>=n then begin b[i]:=b[i]-n; inc(b[i+1]); end;

if b[t+1]>0 then inc(t);

a:=b;

x:=0;

for i:=1 to t do

if a[i]<>a[t-i+1] then begin x:=1; break; end;

if x=0 then begin writeln('step=',ans); halt; end;

end;

writeln('impossible!')

end.

版權屬於: 

2023年分割槽聯賽普級組之二 校門外

description 某校大門外長度為l的馬路上有一排樹,每兩棵相鄰的樹之間的間隔都是1公尺。我們可以把馬路看成乙個數軸,馬路的一端在數軸0的位置,另一端在l的位置 數軸上的每個整數點,即0,1,2,l,都種有一棵樹。由於馬路上有一些區域要用來建地鐵。這些區域用它們在數軸上的起始點和終止點表示。已...

2023年分割槽聯賽普級組之二 開心的金明

題目 description 金明今天很開心,家裡購置的新房就要領鑰匙了,新房裡有一間他自己專用的很寬敞的房間。更讓他高興的是,媽媽昨天對他說 你的房間需要購買哪些物品,怎麼布置,你說了算,只要不超過n 元錢就行 今天一早金明就開始做預算,但是他想買的東西太多了,肯定會超過媽媽限定的n 元。於是,他...

2023年分割槽聯賽普級組第二題 尋寶

解題思路 先讀入資料,用三個陣列分別儲存每間房牌子上的數字 每間房可不可以通往上層和每層樓有多少個可以通往上層的房,然後用迴圈模擬,先加上該房間裡牌子上的數,然後用 repeat 模擬在該層樓轉圈。最後輸出 ans mod 20123 的值即可。程式 const maxn 10000 maxm 10...