ZOJ 3490 String Successor
题意 : 给你一个字符串,让你按照给定规则进行处理。
- 如果字符串里有字母或者是数字就忽略非字符数字,如果没有,就让最右边的那个字符+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的更多相关文章
- ZOJ 3490 String Successor(模拟)
Time Limit: 2 Seconds Memory Limit: 65536 KB The successor to a string can be calculated by applying ...
- ZOJ 3490 String Successor 字符串处理
一道模拟题,来模拟进位 暴力的从右往左扫描,按规则求后继就好了.除了Sample已给出的,还有一些需要注意的地方: 9的后继是10,而不是00: (z)的后继是(aa),而不是a(a): 输入虽然最长 ...
- ZOJ——String Successor(字符串模拟题目)
ZOJ Problem Set - 3490 String Successor Time Limit: 2 Seconds Memory Limit: 65536 KB The succes ...
- String Successor zoj 3490
链接 [https://vjudge.net/contest/294259#problem/D] 题意 就是给你一个字符串,要进行n次操作 让你输出每次的字符串 操作规则: 1.如果有数字或者字母就忽 ...
- String Successor(模拟)
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3490 题意:给出一个字符串,一个操作次数,每次操作从当前字符串最右边的字符 ...
- zoj 3490
蛋都疼了,高了半天,Output Limit Exceeded 原来是输入的问题,我靠!!以后还是用输入输出c++好,这尼玛!!郁闷!!!!! #include<stdio.h> #inc ...
- ZOJ 3985 - String of CCPC - [字符串处理]
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3985 题意: 给出一个长度为n的字符串,全部由'C'和'P'组成 ...
- ZOJ - 3985 - String of CCPC (思维 + 暴力)
题意: 询问一共有有多少个CCPC,每个得1分,可以自己在任意位置添加字母,第i次添加需要耗费i-1分 思路: 既然每次添加需要耗分,添加第二个字母,相当于没有添加,所以只需要添加一次就好 先计算出原 ...
- 一位学长的ACM总结(感触颇深)
发信人: fennec (fennec), 信区: Algorithm 标 题: acm 总结 by fennec 发信站: 吉林大学牡丹园站 (Wed Dec 8 16:27:55 2004) AC ...
随机推荐
- PHP中foreach循环详解
首先要说的是,其实我对foreach循环的用法并不是很精通,说详解,其实也只是我自己的理解,希望对你能有点帮助 . 先来看一下foreach的语法: foreach ($array as $key=& ...
- EL标签库
首先要导入jar包 jst1.jar standard.jar 在页面中引入标签库 <%@taglib uri="..." prefix=".."%& ...
- 使用jsonp跨域请求
一.异步对象,不能实现跨域请求 在站点A中访问站点B的数据: 站点A代码: window.onload = function () { document.getElementById("bt ...
- AWK 脚本编写习惯
教训总结: 不能忽略了脚本语言的编写规范! 创建数组的时候初始化,特别是在for循环中使用的数组: u_count[; g_count[; 认真对待对象,特别是数组的命名: username_to_d ...
- linux启动报错:kernel panic - not attempted to kill init
系统类型:CentOS 6.4(x64) 启动提示:Kernel panic - not syncing: Attempted to kill init 解决办法: 系统启动的时候,按下‘e’键进入g ...
- 【转】图解SQL的各种连接join
原帖地址:http://www.nowamagic.net/librarys/veda/detail/936 图解SQL的各种连接join 让你对SQL的连接一目了然 在 2011年12月22日 那天 ...
- redis 实践—— sorted set, hash set
在这里就不谈redis的安装与启动啦,网上太多人写这个了. 从最近的一个项目[钻石夺宝]说起,如果大家有玩过一元夺宝或者全名夺宝的话,大概会知道如果参与人数多的话,每隔几秒.快的话每隔一秒都会新生成一 ...
- mysql innodb 数据打捞(一)innodb 页面结构特征
如果文件系统损坏或意外删除了数据库文件,只要磁盘空间没有被覆盖,其实数据都还在磁盘的扇区中,还是可以恢复出来的,有些通用的文件恢复工具好象也可以恢复文件 ,但这里要研究的是在通用文件 恢复工具失效的时 ...
- Linux负载均衡概念与实践(二)
构建实践LVS+Keepalived实现负载均衡 keepalived概述 1.keepalived是专门针对LVS设计的一款强大的辅助工具,主要用来提供故障切换和健康检查功能——判断LVS负载调度器 ...
- Javascript中的迭代、归并方法
迭代方法 在Javascript中迭代方法个人觉得尤为重要,在很多时候都会有实际上的需求,javascript提供了5个迭代方法来供我们操作,它们分别为: every() 对数组中的每一个项运用给定的 ...