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