点我看题目

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

  • 如果字符串里有字母或者是数字就忽略非字符数字,如果没有,就让最右边的那个字符+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 >= ; i--)
{
if(isalnum(ch[i]))
return ;
}
return ;
}
void carry(int len)
{
for(int i = len ; i >= ; i--)
{
if(isalnum(ch[i]))
{
if(ch[i] == '')
{
ch[i] = '' ;
if(i == || judge1(i-))
ch.insert(i,"") ;
else carry(i-) ;
}
else if(ch[i] == 'z')
{
ch[i] = 'a' ;
if(i == || judge1(i-))
{
ch.insert(i,"a") ;
}
else carry(i-) ;
}
else if(ch[i] == 'Z')
{
ch[i] = 'A' ;
if(i == || judge1(i-))
{
ch.insert(i,"A") ;
}
else carry(i-) ;
}
else ch[i]++ ;
return ;
}
}
}
int main()
{
int T,n ;
scanf("%d",&T) ;
while(T--)
{
cin>>ch>>n ;
for(int i = ; i < n ; i++)
{
if(!judge1(ch.size()-)) carry(ch.size()-) ;
else
ch[ch.size()-]++ ;
cout<<ch<<endl ;
}
printf("\n") ;
}
return ;
}

普通for循环的

#include <stdio.h>
#include <string.h>
#include <iostream>
#include <string>
#include <algorithm> using namespace std ; int len1;
char ch[],ch1[] ; int judge(char sh)
{
if((sh >= ''&&sh <= '')||(sh >= 'A'&&sh <= 'Z')||(sh >= 'a' && sh <= 'z'))
return ;
return ;
}
int judge1(int n)
{
for(int i = n ; i >= ; i--)
{
if(judge(ch[i]))
return ;
}
return ;
}
void carry(int len)
{
int k ;
for(int i = len ; i >= ; i--)
{
if(judge(ch[i]))
{
if(ch[i] == '')
{
ch[i] = '' ;
if(i == || judge1(i-))
{
for(k = len1 ; k >= i ; k--)
ch[k+] = ch[k] ;
ch[i] = '' ;
len1++;
}
else carry(i-) ;
}
else if(ch[i] == 'z')
{
ch[i] = 'a' ;
if(i == || judge1(i-))
{
for(k = len1 ; k >= i ; k--)//一开始是从前往后移,但是都被覆盖了,是我没想到
ch[k+] = ch[k] ;
len1++;
}
else carry(i-) ;
}
else if(ch[i] == 'Z')
{
ch[i] = 'A' ;
if(i == || judge1(i-))
{
for(k = len1 ; k >= i ; k--)
ch[k+] = ch[k] ;
len1++;
}
else carry(i-) ;
}
else ch[i]++ ;
return ;
}
}
}
int main()
{
int T,n ;
scanf("%d",&T) ;
while(T--)
{
memset(ch,,sizeof(ch));
scanf("%s %d",ch,&n) ;
for(int i = ; i < n ; i++)
{
len1 = strlen(ch) ;//一开始len用的是局部变量,但是当从Z变成AA的时候长度没有跟着变,所以就改成了全局
if(!judge1(len1-)) carry(len1-) ;
else ch[len1-]++ ;
cout<<ch<<endl ;
}
printf("\n") ;
}
return ;
}

ZOJ 3490 String Successor的更多相关文章

  1. ZOJ 3490 String Successor(模拟)

    Time Limit: 2 Seconds Memory Limit: 65536 KB The successor to a string can be calculated by applying ...

  2. ZOJ 3490 String Successor 字符串处理

    一道模拟题,来模拟进位 暴力的从右往左扫描,按规则求后继就好了.除了Sample已给出的,还有一些需要注意的地方: 9的后继是10,而不是00: (z)的后继是(aa),而不是a(a): 输入虽然最长 ...

  3. ZOJ——String Successor(字符串模拟题目)

    ZOJ Problem Set - 3490 String Successor Time Limit: 2 Seconds      Memory Limit: 65536 KB The succes ...

  4. String Successor zoj 3490

    链接 [https://vjudge.net/contest/294259#problem/D] 题意 就是给你一个字符串,要进行n次操作 让你输出每次的字符串 操作规则: 1.如果有数字或者字母就忽 ...

  5. String Successor(模拟)

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3490 题意:给出一个字符串,一个操作次数,每次操作从当前字符串最右边的字符 ...

  6. zoj 3490

    蛋都疼了,高了半天,Output Limit Exceeded 原来是输入的问题,我靠!!以后还是用输入输出c++好,这尼玛!!郁闷!!!!! #include<stdio.h> #inc ...

  7. ZOJ 3985 - String of CCPC - [字符串处理]

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3985 题意: 给出一个长度为n的字符串,全部由'C'和'P'组成 ...

  8. ZOJ - 3985 - String of CCPC (思维 + 暴力)

    题意: 询问一共有有多少个CCPC,每个得1分,可以自己在任意位置添加字母,第i次添加需要耗费i-1分 思路: 既然每次添加需要耗分,添加第二个字母,相当于没有添加,所以只需要添加一次就好 先计算出原 ...

  9. 一位学长的ACM总结(感触颇深)

    发信人: fennec (fennec), 信区: Algorithm 标 题: acm 总结 by fennec 发信站: 吉林大学牡丹园站 (Wed Dec 8 16:27:55 2004) AC ...

随机推荐

  1. nginx支持url的PATHINFO

    fastcgi_split_path_info ^(.+?\.php)(/.*)$; set $path_info $fastcgi_path_info; fastcgi_param PATH_INF ...

  2. Exchanger, Changing data between concurrent tasks

    The Java concurrency API provides a synchronization utility that allows the interchange of data betw ...

  3. 【高性能服务器】Tomcat剖析

    引言 Tomcat是一个流行的servlet容器,对于开发人员来说整体和容器打交道有必要花一些时间爱你了解其内部结构.本文将从一下几个方面来剖析其内部结构. 整体结构 连接器 初始化过程 如何处理一个 ...

  4. RabbitMQ 原文译03--发布和订阅

    发布/订阅 在之前的案例中我们创建了一个工作队列,这个工作队列的实现思想就是一个把每一个任务平均分配给每一个执行者,在这个篇文章我们会做一些不一样的东西,把一个消息发送给多个消费者,这种模式就被称作& ...

  5. [转]Windows Shell 编程 第四章 【来源 http://blog.csdn.net/wangqiulin123456/article/details/7987933】

    第四章 文件的本质 以前,所有文件和目录都有一个确定的属性集:时间,日期,尺寸,以及表示‘只读的’,‘隐藏的,‘存档的’,或‘系统的’状态标志.然而,Windos95(及后来的WindowsNT4.0 ...

  6. sorted函数

    我们需要对List.Dict进行排序,Python提供了两个方法对给定的List L进行排序,方法1.用List的成员函数sort进行排序,在本地进行排序,不返回副本方法2.用built-in函数so ...

  7. XMPP即时通讯(代码实现)

    1.配置XMPP(XMPPConfig.m) 2.配置XMPPFramework框架 3.创建单例类(XMPPManager.h/XMPPManager.m)管理器 XMPPManager.m: #i ...

  8. Java多线程-线程的锁总结

    一.多线程-同步函数的锁是this /*同步函数用的是哪一个锁呢?函数需要被对象调用.那么函数都有一个所属对象引用.就是this.所以同步函数使用的锁是this. 通过该程序进行验证. 使用两个线程来 ...

  9. 第48条:如果需要精确的答案,请避免使用float和double

    float和double主要为了科学计算和工程计算而设计,执行二进制浮点运算,这是为了在广泛的数值范围上提供较为精确的快速近似计算而精心设计的.然而,它们没有提供完全精确的结果,所以不适合用于需要精确 ...

  10. node.js 安装express 提示 command is not found

    肯定有遇到这样的问题. 在执行express -e app时,出现 command is not found 此时需要执行 : $ npm install -g express-generator 你 ...