点我看题目

题意 : 给你一个字符串,让你按照给定规则进行处理。

  • 如果字符串里有字母或者是数字就忽略非字符数字,如果没有,就让最右边的那个字符+1.
  • 增量都是从最右边的字母或者数字开始的。
  • 增加一个数字的方法是加1到另一个数字('0' -> '1', '1' -> '2' ... '9' -> '0')。
  • 增加一个大写字母的方法是加一位到另一个字母 ('A' -> 'B', 'B' -> 'C' ... 'Z' -> 'A')。
  • 增加一个小写字母的方法是加一位到另一个字母('a' -> 'b', 'b' -> 'c' ... 'z' -> 'a')。
  • 如果增加到了9或者z或者Z,就需要进位,进给它左边离它最近的字母或者数字
  • 如果进位的时候前边没有字母或者数字了,就在这位的前边加一位,例如9进位之后要变为0,前边要加一个1,A前边加一个A,a前边加一个a。

思路 : 就是一个模拟,用string中的insert非常方便也不容易错,我比完赛之后脑抽了一下,想用普通的方法去写,结果改了好几天。。。。。T_T......郁闷啊

insert版的

#include <stdio.h>
#include <string.h>
#include <iostream>
#include <string>
#include <ctype.h>
#include <algorithm>

using namespace std ;

string ch ;


int judge1(int n)
{
    for(int i = n ; i >= 0 ; i--)
    {
        if(isalnum(ch[i]))
            return 0 ;
    }
    return 1 ;
}
void carry(int len)
{
    for(int i = len ; i >= 0 ; i--)
    {
        if(isalnum(ch[i]))
        {
            if(ch[i] == '9')
            {
                ch[i] = '0' ;
                if(i == 0 || judge1(i-1))
                    ch.insert(i,"1") ;
                else carry(i-1) ;
            }
            else if(ch[i] == 'z')
            {
                ch[i] = 'a' ;
                if(i == 0 || judge1(i-1))
                {
                    ch.insert(i,"a") ;
                }
                else carry(i-1) ;
            }
            else if(ch[i] == 'Z')
            {
                ch[i] = 'A' ;
                if(i == 0 || judge1(i-1))
                {
                    ch.insert(i,"A") ;
                }
                else carry(i-1) ;
            }
            else ch[i]++ ;
            return ;
        }
    }
}
int main()
{
    int T,n ;
    scanf("%d",&T) ;
    while(T--)
    {
        cin>>ch>>n ;
        for(int i = 0 ; i < n ; i++)
        {
            if(!judge1(ch.size()-1)) carry(ch.size()-1) ;
            else
                ch[ch.size()-1]++ ;
           cout<<ch<<endl ;
        }
        printf("\n") ;
    }
    return 0 ;
}
View Code

相关文章:

  • 2021-11-10
  • 2021-11-20
  • 2022-12-23
  • 2021-10-07
  • 2022-12-23
  • 2021-11-09
  • 2022-12-23
猜你喜欢
  • 2021-12-01
  • 2022-12-23
  • 2021-08-28
  • 2021-10-20
  • 2021-11-03
  • 2021-07-12
相关资源
相似解决方案