zoukankan      html  css  js  c++  java
  • UVA 146 ID Codes

    UVA_146

    这个题目实际上就是要求生成下一个字典序排列。

    如果要是恰好比现在的字符串大一点点的话,肯定是最后连续的几位变动得越少越好,那么不妨从后往前搜,直到后面一个字符要大于前面一个字符,这时从前面那个字符一直到字符串末尾便是最小的变动区间。之后在这个区间里找到恰好比首字符大一点的字符和首字符进行交换,然后将这个区间除首字符之外按字典序排列即可。

    #include<string.h>
    #include
    <string.h>
    #include
    <stdlib.h>
    char b[60];
    int cmp(const void *_p,const void *_q)
    {
    char *p=(char *)_p;
    char *q=(char *)_q;
    return *p-*q;
    }
    int main()
    {
    int i,j,k,n;
    char temp;
    while(1)
    {
    scanf(
    "%s",b);
    if(b[0]=='#')
    break;
    n
    =strlen(b);
    for(k=n-1;k>0;k--)
    if(b[k]>b[k-1])
    break;
    if(k==0)
    {
    printf(
    "No Successor\n");
    continue;
    }
    for(i=n-1;i>=k;i--)
    if(b[i]>b[k-1])
    {
    temp
    =b[i];
    b[i]
    =b[k-1];
    b[k
    -1]=temp;
    break;
    }
    qsort(b
    +k,n-k,sizeof(b[0]),cmp);
    printf(
    "%s\n",b);
    }
    return 0;
    }

      

  • 相关阅读:
    php面试题-2
    排序算法-1
    php面试题-1
    ES6基础-4
    ES6基础-3
    mysql优化-1
    ES6基础-2
    vuecli 项目进行gzip压缩 使页面加载速度更快
    vueCli3 项目创建时,git bash 箭头选择无效问题
    gulp4简单用法和问题总结
  • 原文地址:https://www.cnblogs.com/staginner/p/2164590.html
Copyright © 2011-2022 走看看