問題 G 最小的回文數

2021-09-25 05:32:57 字數 1607 閱讀 9435

問題 g: 最小的回文數

時間限制: 1 sec 記憶體限制: 32 mb

[提交][狀態][討論版]

題目描述

回文數是從前往後和從後往前得到的數是相同的。

現給你乙個正整數n,請你找到比n大的最小的那個回文數p。

輸入輸入包含多組測試資料。

每組輸入乙個正整數n,n不超過10000位,並且n不包含前導0。

輸出對於每組輸入,輸出比n大的最小的那個回文數p。

樣例輸入

44

3175

樣例輸出

55

4181

提示

/*解題思路:

字串處理。

分為原來使回文,原來不是回文兩部分來處理。

原來是回文,要特殊考慮一下全是9的情況,直接輸出乙個1,然後length-1個0,最後加乙個1。

原來是回文且不全是9,只需要從對稱軸開始找第一對不為9的+1就ok(長度為奇數我當中間同乙個數為一對)

原來不是回文,明確一點,不能變小!

所以 對稱軸左邊的值 先賦值 給它們對稱的位置

這讓原來不是回文的變成了乙個回文,但是並不能保證它沒有變小。

所以變成回文後,與原來的那個串比較一下,如果比之前大,那這個就是結果。

如果沒有比之前大,那就把這個串(已經變成了回文串)按原來那樣是回文的時候一樣處理就行!

*/ac_code:

#include

using namespace std;

const

int maxn =

1e4+5;

char s[maxn]

;char st[maxn]

;void

solve

(char

* s,

int cnt,

int len)

printf

("1\n");

return;}

if(s[pos]

!='9'

)else

s[pos]

= s[len-

1-pos]

= s[pos]+1

;}printf

("%s\n"

,s);

return;}

intmain()

if(s[i]

=='9'

) i==j ? cnt +=1

: cnt +=2

;}if(flag)

else

if(st[i]

=='9'

) i==j ? cnt +=1

: cnt +=2

;}if(

strcmp

(st,s)

>0)

printf

("%s\n"

,st)

;else

solve

(st,cnt,len);}

memset

(s,'\0'

,sizeof

(s));}

return0;

}

syu問題 G 回文數猜想

乙個正整數,如果從左向右讀 稱之為正序數 和從右向左讀 稱之為倒序數 是一樣的,這樣的數就叫回文數。任取乙個正整數,如果不是回文數,將該數與他的倒序數相加,若其和不是回文數,則重複上述步驟,一直到獲得回文數為止。例如 68變成154 68 86 再變成605 154 451 最後變成1111 605...

字串問題 回文最小分割數

題目 給定乙個字串str,返回把str全部切成回文子串的最小分割數。舉例 str aba str本身就是回文串,返回0.str acdcdcdad 最少需要切兩次變成3個回文子串,所以返回2.基本思路 本題是乙個經典的動態規劃的題目。定義動態規劃陣列dp,dp i 的含義是子串str 0 i 至少需...

構成最小回文數的分析

給定字串,可以通過插入字元,使其變成回文,求最少插入字元的數量。比如poj 1159 這題 ab5db可以最少插入兩個字元 構成回文 abd5dba abcd可以最少插入三個字元 構成回文 abcdcba 分析 用動態規劃。設字元為str 長度為n,下標的開始為l,結束為h 那麼如果str l st...