程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> No to Palindromes

No to Palindromes

編輯:C++入門知識

No to Palindromes


/*
題意:給你一個字符串,尋找按照字典序排的下一個符合條件的字符串
下一個滿足的字符串一定是改變盡量靠右的字符才能得到(字典序),
從最右面開始找,假設當前是第i位,如果i位增加之後滿足和i-1,i-2位均不相同的話,
那麼最小的肯定就是從這裡開始改的(因為前綴沒有回文字串,所以改變i位後的串也不會有),
接下來就把後面的為都補全。
*/
# include
# include
# include
# include
using namespace std;
char a[1234567];
int n,p;
bool judge(int now)
{
    for(int i=1;; i++)
    {
        if(a[now]+i>'a'+p-1)
            return false;
        if(now>0&&a[now]+i==a[now-1])
            continue;
        if(now>1&&a[now]+i==a[now-2])
            continue;
        a[now]+=i;
        return true;
    }
}
void get(int now)
{
    for(int i=0;; i++)
    {
        if(now>0&&'a'+i==a[now-1])
            continue;
        if(now>1&&'a'+i==a[now-2])
            continue;
        a[now]='a'+i;
        return  ;
    }
}
int main()
{
    scanf("%d%d",&n,&p);
    scanf("%s",a);  
    int ok=0;
    int i;
    for( i=n-1; i>=0; i--)
    {
        if(judge(i))
        {
            ok=1;
            break;
        }
    }
    if(ok)
    {
        for( i=i+1; i

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved