悲剧地wa了,不知道哪错,而且代码越改越恶心
不喜勿看=。= ,知道哪错的麻烦告诉我一下O(∩_∩)O...
①
未改
inline int Rint() { int x; scanf("%d", &x); return x;}
#define MAXN 110
unsigned char s[MAXN];
int n;
int m;
int isan(int cur) //!!
{
for(int i=cur; i>=0; i--)
if((s[i] >='0' && s[i]<='9') || (s[i]>='A' && s[i]<='z'))
return i;
return -1;
}
int add(int pos) ////进位 1 A a == 1 2 3
{
unsigned char& a = s[pos];
if(a>='0' && a<='9' )
{
if(a == '9') { a='0'; return 1; }
else a+=1;
}
else if(a>='A' && a<='Z')
{
if(a == 'Z') { a='A'; return 2; }
else a+=1;
}
else
{
if(a == 'z') { a='a'; return 3;}
else a+=1;
}
return 0;
}
void makestr(int pos, unsigned char a)
{
for(int i=m+1; i>=pos+1; i--) //------------'/0'
s[i] = s[i-1];
s[pos] = a;
m++;
}
void solve()
{
int shit=1;
//int m = strlen(s)-1; //n-1
for(int i=0; i<n; i++)
{
// int m = strlen(s)-1; //n-1
int pos;
// if(shit && (pos = isan(m))!=-1) //存在a/n
if((pos = isan(m))!=-1) //存在a/n
{
int tt;
while(tt = add(pos)) //进位 1 A a == 1 2 3
{
int t = isan(pos-1);
if(t==-1) //无a/n
{
if(tt == 1) makestr(pos, '1');
else if(tt == 2) makestr(pos, 'A');
else if(tt == 3) makestr(pos, 'a');
break; //进位完毕
}
else pos = t; //找下一个位置
}
}
else // 无a/n
{
// shit = 0;
s[m]++; //最右
}
s[m+1] = '/0';
printf("%s/n", s); //每次输出一次
}
}
int main()
{
int t = Rint();
for(int i=0; i<t; i++)
{
// if(i) printf("/n"); //???
scanf("%s", s);
m =strlen((char*)s)-1;
n = Rint();
solve();
printf("/n");
}
}
②
别人的,ac
直接用c++ string,insert确实比较方便。
cin>>str>>num;
for(i=1;i<=num;i++){
int len=str.size();
flag=1;
mak=0;
k=0;
for(j=len-1;j>=0&&flag;j--){
if(str[j]>='0'&&str[j]<='9') {
str[j]+=flag;
if(str[j]>'9') str[j]='0';
else flag=0;
mak=1;
k=j;
}
else if(str[j]>='a'&&str[j]<='z') {
str[j]+=flag;
if(str[j]>'z') str[j]='a';
else flag=0;
mak=2;
k=j;
}
else if(str[j]>='A'&&str[j]<='Z') {
str[j]+=flag;
if(str[j]>'Z') str[j]='A';
else flag=0;
mak=3;
k=j;
}
}
if(flag) {
if(mak==0) {
str[len-1]++;
}
else if(mak==1) {
string::iterator it;
it=str.begin();
str.insert(it+k,'1');
}
else if(mak==2) {
string::iterator it;
it=str.begin();
str.insert(it+k,'a');
}
else if(mak==3) {
string::iterator it;
it=str.begin();
str.insert(it+k,'A');
}
}
cout<<str<<endl;
}
cout<<endl;
}
return 0;
}
原文链接: https://www.cnblogs.com/tclh123/archive/2011/04/16/2587103.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/24124
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!