藍橋杯 演算法訓練 回文數

2021-09-12 22:34:04 字數 2507 閱讀 6907

問題描述

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

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

又如:對於10進製數87:

s te

p1

step1

step

1:87+78 = 165 ste

p2

step2

step

2:165+561 = 726

s te

p3

step3

step

3:726+627 = 1353 ste

p4

step4

step

4:1353+3531 = 4884

在這裡的一步是指進行了一次n

nn進製的加法,上例最少用了4步得到回文數4884。

寫乙個程式,給定乙個n

nn(2<=n

nn<=10或n

nn=16)進製數m

mm(其中16進製制數字為0-9與a−f

a-fa−

f),求最少經過幾步可以得到回文數。

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

ossi

ble!

impossible!

imposs

ible

!」輸入格式

兩行,n與m

n與mn與

m輸出格式

如果能在30步以內得到回文數,輸出「ste

p=xx

step=xx

step=x

x」(不含引號),其中xxxx

xx是步數;否則輸出一行」imp

ossi

ble!

impossible!

imposs

ible

!」(不含引號)

樣例輸入987

樣例輸出

s te

p=

6step=6

step=6

個人思路:

第二種方法說的有點繞,可以舉個簡單的例子,例如我們輸入乙個二進位制數1100,按照上述的做法就先將其轉換為十進位制數12(num

numnu

m),再將12傳入判斷,經過上述的公式轉換得到3,不相等則該步得到的不是回文數,將ans

=12+3

=15賦給

nu

mans = 12 + 3 = 15賦給num

ans=12

+3=1

5賦給n

um,繼續判斷

1)

#include

#include

#include

using namespace std;

int n, step;

string m;

int num[

1005];

//判斷是否為回文數

bool judge

(int x)

return true;

}//n進製數相加

intadd

(int x)

;for

(int i =

1; i <= x;

++i)

if(ans[x +1]

)for

(int i = x; i >=1;

--i)

return x;

}int

main()

else

}while

(step <=30)

step++

; len =

add(len);}

cout <<

"impossible!"

<< endl;

return0;

}

2)

#include

#include

using namespace std;

typedef

unsigned

long

long ll;

ll n, step, len, num;

ll ans;

string m;

bool judge

(ll a)

ans = ret + a;

//得到和

return ret == a;

//判斷是否為回文數

}ll ch

(char s)

intmain()

while

(step <=30)

num = ans;

step++;}

cout <<

"impossible!"

<< endl;

return0;

}

藍橋杯 演算法訓練 回文數(C )

若乙個數 首位不為零 從左向右讀與從右向左讀都一樣,我們就將其稱之為回文數。例如 給定乙個10進製數56,將56加65 即把56從右向左讀 得到121是乙個回文數。又如 對於10進製數87 step1 87 78 165 step2 165 561 726 step3 726 627 1353 st...

藍橋杯 ALGO 14 演算法訓練 回文數

問題描述 若乙個數 首位不為零 從左向右讀與從右向左讀都一樣,我們就將其稱之為回文數。例如 給定乙個10進製數56,將56加65 即把56從右向左讀 得到121是乙個回文數。又如 對於10進製數87 step1 87 78 165 step2 165 561 726 step3 726 627 13...

回文數(藍橋杯)

若乙個數 首位不為零 從左向右讀與從右向左讀都一樣,我們就將其稱之為回文數。例如 給定乙個10進製數56,將56加65 即把56從右向左讀 得到121是乙個回文數。又如 對於10進製數87 step1 87 78 165 step2 165 561 726 step3 726 627 1353 st...