# 159 条题解

• @ 2021-09-04 14:17:18
``````#include <bits/stdc++.h>
using namespace std;

int main(){
int p1,p2,p3,i=0,k;
char ch[300],be,af,f,j,p;
scanf("%d%d%d%s",&p1,&p2,&p3,ch);
while(ch[i]){
be=ch[i-1];
af=ch[i+1];
f=ch[i];
if(f=='-'&&af>be&&(be>='0'&&af<='9'||be>='a'&&af<='z')){
for(p3==1?j=be+1:j=af-1; p3==1?j<af:j>be; p3==1?j++:j--){
p=j;
if(p1==2)
p=(p>='a')?p-32:p;
else if(p1==3)
p='*';
for(k=0; k<p2; k++)
printf("%c",p);
}
}
else
printf("%c",f);
i++;
}
return 0;
}
``````
• @ 2017-10-21 13:37:15

var s,x:ansistring;
p1,p2,p3,i,j,k:longint;
begin
x:='';
for i:=1 to length(s) do
if s[i]='-' then begin
if ((s[i-1]>='a')and(s[i+1]<='z'))or((s[i-1]>='0')and(s[i+1]<='9')) then
begin
if ord(s[i+1])<=ord(s[i-1]) then x:=x+s[i];
if ord(s[i+1])-1>ord(s[i-1]) then begin
if p1=1 then
if p3=1 then begin
for k:=ord(lowercase(s[i-1]))+1 to ord(lowercase(s[i+1]))-1 do
for j:=1 to p2 do
x:=x+chr(k);
end
else begin
for k:=ord(lowercase(s[i+1]))-1 downto ord(lowercase(s[i-1]))+1 do
for j:=1 to p2 do
x:=x+chr(k);
end;
if p1=2 then
if p3=1 then begin
for k:=ord(upcase(s[i-1]))+1 to ord(upcase(s[i+1]))-1 do
for j:=1 to p2 do
x:=x+chr(k);
end
else begin
for k:=ord(upcase(s[i+1]))-1 downto ord(upcase(s[i-1]))+1 do
for j:=1 to p2 do
x:=x+chr(k);
end;
if p1=3 then
for k:=ord(upcase(s[i-1]))+1 to ord(upcase(s[i+1]))-1 do
for j:=1 to p2 do
x:=x+'*';
end;
end
else x:=x+s[i];
end
else x:=x+s[i];
write(x);
end.

• @ 2017-05-15 11:19:27

思路
模拟 进行字符串操作
将操作过程写成函数 进行输出 一定要注意细节 考虑特殊情况
如’-‘开头，’—’连在一起,还有当p1=2时数字不能和小写字母一样处理
代码如下
```c++ #include<iostream> #include<cstdio> #include<cstdlib> #include<algorithm> #include<cmath> #include<cstring> #define N 1000005 using namespace std; char a[N]; int p1,p2,p3; void deal(char x,char y){ if(x==y-1) return;//如果没有展开 就直接return 因为已经输出过x和y char temp[500]; int p=0; for(int i=x+1;i<=y-1;i++){ for(int j=1;j<=p2;j++){ if(p1==1) temp[++p]=i; else if(p1==2&&i>='a'&&i<='z')//p1=2的字母情况 temp[++p]=i-'a'+'A'; else if(p1==2&&i>='1'&&i<='9')//p1=2的数字情况 temp[++p]=i; else if(p1==3) temp[++p]='*'; } } if(p3==1)//逆序输出情况 for(int i=1;i<=p;i++) cout<<temp[i]; else if(p3==2) for(int i=p;i>=1;i--) cout<<temp[i]; } int main(){ scanf("%d%d%d",&p1,&p2,&p3); scanf("%s",a+1); int len=strlen(a+1); for(int i=1;i<=len;i++){ if(a[i]=='-'){ char x=a[i-1]; char y=a[i+1]; if(x>='a'&&x<='z'&&y<='z'&&y>='a'&&x<y||x>='0'&&x<='9'&&y>='0'&&y<='9'&&x<y){//满足条件 不输出'-' 输出两个字符的展开 deal(x,y); //cout<<" "<<"deal"<<" "; } else cout<<a[i];//不满足 如s-4就输出'-' } else cout<<a[i]; } } ```

• @ 2020-04-14 10:39:49

一道细心点就能做对的模拟题。

下面分析下坑点和分层思路：

坑点：

1、"-"可能出现在第一个或最后一个，同时可能连续出现，用判断特殊处理

2、如果x-y中x为数字而y为字母，应选择不展开！（与题目中提及的特殊情况不重叠）

分层：

1、是符号还是"-",同时加上对"-"的特殊处理

2、x与y的关系，分<=、>、x+1=y

3、x与y同时字母还是数字

4、以p1、p3、p2的层次循环即可

附上代码
```cpp #include <bits/stdc++.h> using namespace std; int p1,p2,p3; vector<char> ans; string s; int main() { cin >> p1 >> p2 >> p3 >> s; for(int i=0;i<s.size();i++) { if(s[i]!='-') ans.push_back(s[i]); else if((i==0 || i==s.size()-1) && s[i]=='-' ) ans.push_back('-'); else if(s[i]=='-' && (s[i-1]=='-' || s[i+1]=='-')) ans.push_back('-'); else if(s[i]=='-') { if(s[i-1]>=s[i+1] || (s[i-1]<58 && s[i+1]>96)) ans.push_back('-'); else if(s[i+1]==s[i-1]+1) continue; else { if(p1==3) { for(int k=1;k<=(s[i+1]-s[i-1]-1)*p2;k++) ans.push_back('*'); } else if(s[i+1]<=57 && s[i+1]>=48 && s[i-1]<=57 && s[i-1]>=48) { if(p3==1) { for(int k=s[i-1]+1;k<=s[i+1]-1;k++) for(int j=1;j<=p2;j++) ans.push_back(char(k)); } else if(p3==2) { for(int k=s[i+1]-1;k>=s[i-1]+1;k--) for(int j=1;j<=p2;j++) ans.push_back(char(k)); } } else if(s[i+1]<=122 && s[i+1]>=97 && s[i-1]<=122 && s[i-1]>=97) { if(p1==1) { if(p3==1) { for(int k=s[i-1]+1;k<=s[i+1]-1;k++) for(int j=1;j<=p2;j++) ans.push_back(char(k)); } else if(p3==2) { for(int k=s[i+1]-1;k>=s[i-1]+1;k--) for(int j=1;j<=p2;j++) ans.push_back(char(k)); } } else if(p1==2) { if(p3==1) { for(int k=s[i-1]+1;k<=s[i+1]-1;k++) for(int j=1;j<=p2;j++) ans.push_back(char(k-32)); } else if(p3==2) { for(int k=s[i+1]-1;k>=s[i-1]+1;k--) for(int j=1;j<=p2;j++) ans.push_back(char(k-32)); } } } } } } for(int i=0;i<ans.size();i++) cout << ans[i]; return 0; } ```

• @ 2018-03-30 08:10:01

#include <stdio.h>
#include <string.h>
int p1,p2,p3,len;
char a[100000];
char f( int i)
{
int j;
char c;
if(i==0||i==len-1)
{
printf("-");
return 0;
}
if(a[i+1]=='-'||a[i-1]=='-')
{
printf("-");
return 0;
}
if(a[i+1]>='a'&&a[i+1]<='z')
if(a[i-1]>='0'&&a[i-1]<='9')
{
printf("-");
return 0;
}
if(a[i-1]>='a'&&a[i-1]<='z')
if(a[i+1]>='0'&&a[i+1]<='9')
{
printf("-");
return 0;
}
if(a[i+1]-a[i-1]==1)
return 0;
if(a[i+1]-a[i-1]<=0)
{
printf("-");
return 0;
}
if(p3==1)
{
if(p1==1)
for(c=a[i-1]+1;c<a[i+1];c++)
for(j=0;j<p2;j++)
printf("%c",c);
if(p1==2)
{
if(a[i-1]>='a'&&a[i-1]<='z')

for(c=a[i-1]+1;c<a[i+1];c++)
for(j=0;j<p2;j++)
printf("%c",c+'A'-'a');
else
for(c=a[i-1]+1;c<a[i+1];c++)
for(j=0;j<p2;j++)
printf("%c",c);
}
if(p1==3)
for(c=a[i-1]+1;c<a[i+1];c++)
for(j=0;j<p2;j++)
printf("%c",'*');
}
if(p3==2)
{
if(p1==1)
for(c=a[i+1]-1;c>a[i-1];c--)
for(j=0;j<p2;j++)
printf("%c",c);
if(p1==2)
{
if(a[i-1]>='a'&&a[i-1]<='z')
for(c=a[i+1]-1;c>a[i-1];c--)
for(j=0;j<p2;j++)
printf("%c",c+'A'-'a');
else
for(c=a[i-1]+1;c<a[i+1];c++)
for(j=0;j<p2;j++)
printf("%c",c);
}
if(p1==3)
for(c=a[i-1]+1;c<a[i+1];c++)
for(j=0;j<p2;j++)
printf("%c",'*');
}
return 0;
}
int main()
{
scanf("%d %d %d",&p1,&p2,&p3);
scanf("%s",a);
len=strlen(a);
int i=0;
while(i<len)
{
if(a[i]!='-')
printf("%c",a[i]);
else
f(i);
i++;
}
}

• @ 2018-03-30 08:09:24

#include <stdio.h>
#include <string.h>
int p1,p2,p3,len;
char a[100000];
char f( int i)
{
int j;
char c;
if(i==0||i==len-1)
{
printf("-");
return 0;
}
if(a[i+1]=='-'||a[i-1]=='-')
{
printf("-");
return 0;
}
if(a[i+1]>='a'&&a[i+1]<='z')
if(a[i-1]>='0'&&a[i-1]<='9')
{
printf("-");
return 0;
}
if(a[i-1]>='a'&&a[i-1]<='z')
if(a[i+1]>='0'&&a[i+1]<='9')
{
printf("-");
return 0;
}
if(a[i+1]-a[i-1]==1)
return 0;
if(a[i+1]-a[i-1]<=0)
{
printf("-");
return 0;
}
if(p3==1)
{
if(p1==1)
for(c=a[i-1]+1;c<a[i+1];c++)
for(j=0;j<p2;j++)
printf("%c",c);
if(p1==2)
{
if(a[i-1]>='a'&&a[i-1]<='z')

for(c=a[i-1]+1;c<a[i+1];c++)
for(j=0;j<p2;j++)
printf("%c",c+'A'-'a');
else
for(c=a[i-1]+1;c<a[i+1];c++)
for(j=0;j<p2;j++)
printf("%c",c);
}
if(p1==3)
for(c=a[i-1]+1;c<a[i+1];c++)
for(j=0;j<p2;j++)
printf("%c",'*');
}
if(p3==2)
{
if(p1==1)
for(c=a[i+1]-1;c>a[i-1];c--)
for(j=0;j<p2;j++)
printf("%c",c);
if(p1==2)
{
if(a[i-1]>='a'&&a[i-1]<='z')
for(c=a[i+1]-1;c>a[i-1];c--)
for(j=0;j<p2;j++)
printf("%c",c+'A'-'a');
else
for(c=a[i-1]+1;c<a[i+1];c++)
for(j=0;j<p2;j++)
printf("%c",c);
}
if(p1==3)
for(c=a[i-1]+1;c<a[i+1];c++)
for(j=0;j<p2;j++)
printf("%c",'*');
}
return 0;
}
int main()
{
scanf("%d %d %d",&p1,&p2,&p3);
scanf("%s",a);
len=strlen(a);
int i=0;
while(i<len)
{
if(a[i]!='-')
printf("%c",a[i]);
else
f(i);
i++;
}
}

• @ 2018-03-30 08:08:21

#include <stdio.h>
#include <string.h>
int p1,p2,p3,len;
char a[100000];
char f( int i)
{
int j;
char c;
if(i==0||i==len-1)
{
printf("-");
return 0;
}
if(a[i+1]=='-'||a[i-1]=='-')
{
printf("-");
return 0;
}
if(a[i+1]>='a'&&a[i+1]<='z')
if(a[i-1]>='0'&&a[i-1]<='9')
{
printf("-");
return 0;
}
if(a[i-1]>='a'&&a[i-1]<='z')
if(a[i+1]>='0'&&a[i+1]<='9')
{
printf("-");
return 0;
}
if(a[i+1]-a[i-1]==1)
return 0;
if(a[i+1]-a[i-1]<=0)
{
printf("-");
return 0;
}
if(p3==1)
{
if(p1==1)
for(c=a[i-1]+1;c<a[i+1];c++)
for(j=0;j<p2;j++)
printf("%c",c);
if(p1==2)
{
if(a[i-1]>='a'&&a[i-1]<='z')

for(c=a[i-1]+1;c<a[i+1];c++)
for(j=0;j<p2;j++)
printf("%c",c+'A'-'a');
else
for(c=a[i-1]+1;c<a[i+1];c++)
for(j=0;j<p2;j++)
printf("%c",c);
}
if(p1==3)
for(c=a[i-1]+1;c<a[i+1];c++)
for(j=0;j<p2;j++)
printf("%c",'*');
}
if(p3==2)
{
if(p1==1)
for(c=a[i+1]-1;c>a[i-1];c--)
for(j=0;j<p2;j++)
printf("%c",c);
if(p1==2)
{
if(a[i-1]>='a'&&a[i-1]<='z')
for(c=a[i+1]-1;c>a[i-1];c--)
for(j=0;j<p2;j++)
printf("%c",c+'A'-'a');
else
for(c=a[i-1]+1;c<a[i+1];c++)
for(j=0;j<p2;j++)
printf("%c",c);
}
if(p1==3)
for(c=a[i-1]+1;c<a[i+1];c++)
for(j=0;j<p2;j++)
printf("%c",'*');
}
return 0;
}
int main()
{
scanf("%d %d %d",&p1,&p2,&p3);
scanf("%s",a);
len=strlen(a);
int i=0;
while(i<len)
{
if(a[i]!='-')
printf("%c",a[i]);
else
f(i);
i++;
}
}

• @ 2018-03-30 08:08:02

#include <stdio.h>
#include <string.h>
int p1,p2,p3,len;
char a[100000];
char f( int i)
{
int j;
char c;
if(i==0||i==len-1)
{
printf("-");
return 0;
}
if(a[i+1]=='-'||a[i-1]=='-')
{
printf("-");
return 0;
}
if(a[i+1]>='a'&&a[i+1]<='z')
if(a[i-1]>='0'&&a[i-1]<='9')
{
printf("-");
return 0;
}
if(a[i-1]>='a'&&a[i-1]<='z')
if(a[i+1]>='0'&&a[i+1]<='9')
{
printf("-");
return 0;
}
if(a[i+1]-a[i-1]==1)
return 0;
if(a[i+1]-a[i-1]<=0)
{
printf("-");
return 0;
}
if(p3==1)
{
if(p1==1)
for(c=a[i-1]+1;c<a[i+1];c++)
for(j=0;j<p2;j++)
printf("%c",c);
if(p1==2)
{
if(a[i-1]>='a'&&a[i-1]<='z')

for(c=a[i-1]+1;c<a[i+1];c++)
for(j=0;j<p2;j++)
printf("%c",c+'A'-'a');
else
for(c=a[i-1]+1;c<a[i+1];c++)
for(j=0;j<p2;j++)
printf("%c",c);
}
if(p1==3)
for(c=a[i-1]+1;c<a[i+1];c++)
for(j=0;j<p2;j++)
printf("%c",'*');
}
if(p3==2)
{
if(p1==1)
for(c=a[i+1]-1;c>a[i-1];c--)
for(j=0;j<p2;j++)
printf("%c",c);
if(p1==2)
{
if(a[i-1]>='a'&&a[i-1]<='z')
for(c=a[i+1]-1;c>a[i-1];c--)
for(j=0;j<p2;j++)
printf("%c",c+'A'-'a');
else
for(c=a[i-1]+1;c<a[i+1];c++)
for(j=0;j<p2;j++)
printf("%c",c);
}
if(p1==3)
for(c=a[i-1]+1;c<a[i+1];c++)
for(j=0;j<p2;j++)
printf("%c",'*');
}
return 0;
}
int main()
{
scanf("%d %d %d",&p1,&p2,&p3);
scanf("%s",a);
len=strlen(a);
int i=0;
while(i<len)
{
if(a[i]!='-')
printf("%c",a[i]);
else
f(i);
i++;
}
}

• @ 2017-11-26 12:25:07

丢人丢到家了
连续6次才过
分别30/40/60/0/90/100分
差点砸电脑←_←
犯的都是智障一般但是看样例看不出来的错
拿到了数据才解决了最后两个bug←_←

贴代码，挂自己orz

``````//行末注释的都是出错的点orz
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <cstring>
using namespace std;

int p1,p2,p3,i,tx,ty,tz,d1=1,d2=1;
char in[100010]={0},out[100010]={0},t[1010];
int main()
{
cin>>p1>>p2>>p3;
cin>>in;
if(p1==1) p1=0;
else if(p1==2) p1=-32;//
else p1=-1000;
out[0]=in[0];
while(in[d1]!=0)
{
if(in[d1]!='-')
{
out[d2]=in[d1];
d2++;
}
else
{
if(in[d1-1]>='0' && in[d1+1]<='9' || in[d1-1]>='a' && in[d1+1]<='z')
{//
if(in[d1-1]+1<=in[d1+1])
{
tx=1;ty=in[d1-1]+1;
while(ty<in[d1+1])
{
for(i=1;i<=p2;i++)
{
tz=ty+p1;
if(tz>=16&&tz<=25) tz+=32;//
if(tz<0) t[tx]='*';//
else t[tx]=tz;
tx++;
}
ty++;
}
if(tx!=1)
{
if(p3==1) for(i=1;i<=tx-1;i++)
{
out[d2]=t[i];
d2++;
}
else for(i=tx-1;i>=1;i--)
{//
out[d2]=t[i];
d2++;
}
}
}
else
{
out[d2]='-';
d2++;
}
}
else
{
out[d2]='-';
d2++;
}
}
d1++;
}
d2=0;
while(out[d2]!=0) {cout<<out[d2];d2++;}
return 0;
}
``````
• @ 2017-11-16 20:08:57

哈哈，写了半年

``````#include<iostream>
#include<cctype>
#define FOR(i,x,y) for(i=x;i<=y;++i)
using namespace std;
int main()
{
string s;
int p1,t,p2,p3;
cin>>p1>>p2>>p3;
cin>>s;
int i,j;
char c;
if(p1==1)
{
if(p3==1)
{
for(i=0;i<s.length();++i)
if(s[i]=='-')
{
if(s[i+1]-s[i-1]==1)
{

}
else if(s[i-1]>=s[i+1])
{
cout<<"-";
}
else if(isalpha(s[i-1])&&isalpha(s[i+1]))
{
for(c = tolower(s[i-1]+1);c<tolower(s[i+1]);++c)
{
for(j=0;j<p2;++j)
cout<<c;
}
}
else if(isdigit(s[i-1])&&isdigit(s[i+1]))
{
for(t = s[i-1]-'0'+1;t<s[i+1]-'0';++t)
{
for(j=0;j<p2;++j)
cout<<t;
}
}
else
cout<<s[i];
}
else
cout<<s[i];
}
else if(p3==2)
{
for(i=0;i<s.length();++i)
if(s[i]=='-')
{
if(s[i+1]-s[i-1]==1)
{

}
else if(s[i-1]>=s[i+1])
{
cout<<"-";
}
else if(isalpha(s[i-1])&&isalpha(s[i+1]))
{
for(c = tolower(s[i+1])-1;c>=tolower(s[i-1]+1);--c)
{
for(j=0;j<p2;++j)
cout<<c;
}
}
else if(isdigit(s[i-1])&&isdigit(s[i+1]))
{
for(t = s[i+1]-'0'-1;t>=s[i-1]-'0'+1;--t)
{
for(j=0;j<p2;++j)
cout<<t;
}
}
else
cout<<s[i];
}
else
cout<<s[i];
}
}
else if(p1==2)
{
if(p3==1)
{
for(i=0;i<s.length();++i)
if(s[i]=='-')
{
if(s[i+1]-s[i-1]==1)
{

}
else if(s[i-1]>=s[i+1])
{
cout<<"-";
}
else if(isalpha(s[i-1])&&isalpha(s[i+1]))
{
for(c = toupper(s[i-1]+1);c<toupper(s[i+1]);++c)
{
for(j=0;j<p2;++j)
cout<<c;
}
}
else if(isdigit(s[i-1])&&isdigit(s[i+1]))
{
for(t = s[i-1]-'0'+1;t<s[i+1]-'0';++t)
{
for(j=0;j<p2;++j)
cout<<t;
}
}
else
cout<<s[i];
}
else
cout<<s[i];
}
else if(p3==2)
{
for(i=0;i<s.length();++i)
if(s[i]=='-')
{
if(s[i+1]-s[i-1]==1)
{

}
else if(s[i-1]>=s[i+1])
{
cout<<"-";
}
else if(isalpha(s[i-1])&&isalpha(s[i+1]))
{
for(c = toupper(s[i+1]-1);c>=toupper(s[i-1]+1);--c)
{
for(j=0;j<p2;++j)
cout<<c;
}
}
else if(isdigit(s[i-1])&&isdigit(s[i+1]))
{
for(t = s[i+1]-'0'-1;t>=s[i-1]-'0'+1;--t)
{
for(j=0;j<p2;++j)
cout<<t;
}
}
else
cout<<s[i];
}
else
cout<<s[i];
}
}
else if(p1==3)
{
for(i=0;i<s.length();++i)
if(s[i]=='-')
{
if(s[i+1]-s[i-1]==1)
{

}
else if(s[i-1]>=s[i+1])
{
cout<<"-";
}
else if(isalpha(s[i-1])&&isalpha(s[i+1]))
{
for(c = toupper(s[i+1]-1);c>=toupper(s[i-1]+1);--c)
{
for(j=0;j<p2;++j)
cout<<"*";
}
}
else if(isdigit(s[i-1])&&isdigit(s[i+1]))
{
for(t = s[i+1]-'0'-1;t>=s[i-1]-'0'+1;--t)
{
for(j=0;j<p2;++j)
cout<<"*";
}
}
else
cout<<s[i];
}
else
cout<<s[i];
}

}

``````
• @ 2017-11-16 19:52:54

wa,不知道为啥
```cpp
#include<iostream>
#include<cctype>
#define FOR(i,x,y) for(i=x;i<=y;++i)
using namespace std;
int main()
{
string s;
int p1,t,p2,p3;
cin>>p1>>p2>>p3;
cin>>s;
int i,j;
char c;
if(p1==1)
{
if(p3==1)
{
for(i=0;i<s.length();++i)
if(s[i]=='-')
{
if(isalpha(s[i-1])&&isalpha(s[i+1]))
{
for(c = tolower(s[i-1]+1);c<tolower(s[i+1]);++c)
{
for(j=0;j<p2;++j)
cout<<c;
}
}
else if(isdigit(s[i-1])&&isdigit(s[i+1]))
{
for(t = s[i-1]-'0'+1;t<s[i+1]-'0';++t)
{
for(j=0;j<p2;++j)
cout<<t;
}
}
else
cout<<s[i];
}
else
cout<<s[i];
}
else if(p3==2)
{
for(i=0;i<s.length();++i)
if(s[i]=='-')
{
if(isalpha(s[i-1])&&isalpha(s[i+1]))
{
for(c = tolower(s[i+1])-1;c>=tolower(s[i-1]+1);--c)
{
for(j=0;j<p2;++j)
cout<<c;
}
}
else if(isdigit(s[i-1])&&isdigit(s[i+1]))
{
for(t = s[i+1]-'0'-1;t>=s[i-1]-'0'+1;--t)
{
for(j=0;j<p2;++j)
cout<<t;
}
}
else
cout<<s[i];
}
else
cout<<s[i];
}
}
else if(p1==2)
{
if(p3==1)
{
for(i=0;i<s.length();++i)
if(s[i]=='-')
{
if(isalpha(s[i-1])&&isalpha(s[i+1]))
{
for(c = toupper(s[i-1]+1);c<toupper(s[i+1]);++c)
{
for(j=0;j<p2;++j)
cout<<c;
}
}
else if(isdigit(s[i-1])&&isdigit(s[i+1]))
{
for(t = s[i-1]-'0'+1;t<s[i+1]-'0';++t)
{
for(j=0;j<p2;++j)
cout<<t;
}
}
else
cout<<s[i];
}
else
cout<<s[i];
}
else if(p3==2)
{
for(i=0;i<s.length();++i)
if(s[i]=='-')
{
if(isalpha(s[i-1])&&isalpha(s[i+1]))
{
for(c = toupper(s[i+1]-1);c>=toupper(s[i-1]+1);--c)
{
for(j=0;j<p2;++j)
cout<<c;
}
}
else if(isdigit(s[i-1])&&isdigit(s[i+1]))
{
for(t = s[i+1]-'0'-1;t>=s[i-1]-'0'+1;--t)
{
for(j=0;j<p2;++j)
cout<<t;
}
}
else
cout<<s[i];
}
else
cout<<s[i];
}
}
else if(p1==3)
{
for(i=0;i<s.length();++i)
if(s[i]=='-')
{
if(isalpha(s[i-1])&&isalpha(s[i+1]))
{
for(c = toupper(s[i+1]-1);c>=toupper(s[i-1]+1);--c)
{
for(j=0;j<p2;++j)
cout<<"*";
}
}
else if(isdigit(s[i-1])&&isdigit(s[i+1]))
{
for(t = s[i+1]-1;t>=s[i-1]+1;--t)
{
for(j=0;j<p2;++j)
cout<<"*";
}
}
else
cout<<s[i];
}
else
cout<<s[i];
}
else
cout<<s;

}

• @ 2017-09-14 18:51:06
``````#include <cmath>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#include <string>
#include <sstream>
#include <iomanip>
using namespace std;

int p1,p2,p3;
char s[10000+1];
#define s(x) s[x-1]

inline int check_a_1(char c)
{
if ('A'<=c&&c<='Z')
return 1;
else if ('a'<=c&&c<='z')
return 1;
else
return 0;
}

inline int check_d_1(char c)
{
if ('0'<=c&&c<='9')
return 1;
else
return 0;
}

inline char p_p1_1(char c)
{
if (p1==1&&'A'<=c&&c<='Z')
return c-'A'+'a';
else if (p1==2&&'a'<=c&&c<='z')
return c-'a'+'A';
else if (p1==3)
return '*';
else
return c;
}

int main()
{
while (~scanf("%d%d%d",&p1,&p2,&p3))
{
memset(s,0,sizeof(s));
scanf("%s",&(s(1)));
for (int i=1,sl=strlen(s);i<=sl;i++)
if (s(i)=='-')
{
char c1='\$',c2='\$';
if (1<i&&i<sl)
c1=s(i-1),c2=s(i+1);
if (c1==c2-1)
;
else if (c1>=c2||c1=='\$'||c2=='\$'||check_a_1(c1)==check_d_1(c1)||check_a_1(c2)==check_d_1(c2)||(check_a_1(c1)!=check_a_1(c2)&&check_d_1(c1)!=check_d_1(c2)))
printf("%c",s(i));
else if (p3==1)
{
for (char j=c1+1;j<=c2-1;j++)
for (int k=1;k<=p2;k++)
printf("%c",p_p1_1(j));
}
else if (p3==2)
{
for (char j=c2-1;j>=c1+1;j--)
for (int k=1;k<=p2;k++)
printf("%c",p_p1_1(j));
}
}
else
printf("%c",s(i));
printf("\n");
}
}
``````
• @ 2017-09-14 18:51:22

很H2O的题

• @ 2016-11-18 00:02:59

各种细节性错误导致狂WA。。OrzOrzOrz
#include <iostream>
#include <algorithm>
#include <cstdlib>
#include <cstdio>
#include <vector>
#include <queue>
#include <cstring>
#include <cassert>
#include <cctype>

using namespace std;

#define T { \
for(int k=0;k<p2;k++){ \
if(p1==3)putchar('*');\
else{\
if(isdigit(j))putchar(j);\
else putchar(p1==1?tolower(j):toupper(j));\
}\
}\
}

int p1,p2,p3;
string str;
int main(){
cin>>p1>>p2>>p3>>str;
for(int i=0;str[i];i++){
if(str[i]=='-'){
if(str[i-1]<str[i+1]&&((isdigit(str[i-1])&&isdigit(str[i+1]))||(isalpha(str[i-1])&&isalpha(str[i+1])))){
if(p3==1){
for(int j=str[i-1]+1;j<=str[i+1]-1;j++)T;
}else{
for(int j=str[i+1]-1;j>=str[i-1]+1;j--)T;
}
}else putchar('-');
}else putchar(str[i]);
}
}

• @ 2016-09-19 21:30:37

代码长度==代码行数？
```c++ #include<bits/stdc++.h> using namespace std; #define T for (int j=1;j<=p2;j++) if (p1==1) cout<<c;else if(p1==2) cout<<(char)toupper(c);else cout<<'*' #define a isalpha #define d isdigit string s; int p1,p2,p3; int main(){ cin>>p1>>p2>>p3>>s; for (int i=0;i<s.length()-1;i++){ if (s[i]!='-') cout<<s[i]; else if (s[i-1]<s[i+1]&&(d(s[i-1])&&d(s[i+1])||a(s[i-1])&&a(s[i+1]))) if (p3==1)for (char c=s[i-1]+1;c<s[i+1];c++)T; else for (char c=s[i+1]-1;c>s[i-1];c--)T; else cout<<'-'; } cout<<s[s.length()-1]; return 0; } ```
仅由于数据水才过的

• @ 2016-07-19 23:58:49

坑，交了4遍才过。注意 -- 还有 数字-字母 的情况

• @ 2016-07-14 17:27:26
``````#include<iostream>
#include<cstdio>
#include<cctype>
#include<string>
using namespace std;

int p1, p2, p3;
string s;

void print (char c) {
for (int i = 0; i < p2; i++) cout << c;
}

void print (char c1, char c2) {
if (p3 == 1) for (char c = c1+1; c < c2; c++) print(c);
if (p3 == 2) for (char c = c2-1; c > c1; c--) print(c);
}

void print (int x) {
for (int i = 0; i < x; i++) print('*');
}

void extend (int p) {
if (!p || p >= s.length()-1) { cout << '-'; return;}
char c1 = s[p-1], c2 = s[p+1];
bool alpha = (isalpha(c1) && isalpha(c2));
bool digit = (isdigit(c1) && isdigit(c2));

if (!alpha && !digit) { cout << '-'; return;}
if (c1 >= c2) { cout << '-'; return;}

if (alpha) {
if (p1 == 1) print (c1, c2);
else if (p1 == 2) print (c1+'A'-'a' , c2+'A'-'a');
else if (p1 == 3) print (c2-c1-1);
}
else {
if (p1 == 1 || p1 == 2) print (c1, c2);
else if (p1 == 3) print (c2-c1-1);
}
}

int main ()
{
//freopen ("in.txt", "r", stdin);
cin >> p1 >> p2 >> p3 >> s;
for (int i = 0; i < s.length(); i++) {
if (s[i] == '-') extend(i);
else cout << s[i];
}
return 0;
}
``````
• @ 2016-07-14 11:41:32

#include <stdio.h>

int p1,p2,p3;
char in[1000];
int i;

int judge(){
if(in[i]=='\0')
return 1;
if((in[i]=='-'&&(i==0||in[i-1]>=in[i+1]||in[i-1]=='-'))||in[i]!='-'||(in[i]=='-'&&in[i-1]<60&&in[i+1]>60))
return 2;
if(in[i]=='-'&&in[i-1]<in[i+1])
return 3;
}

void function(){
int j,m;
if(p3==1){
for(j=in[i-1]+1;j<in[i+1];j++)
for(m=0;m<p2;m++){
if(p1==1)
printf("%c",j);
if(p1==2){
if(j>60)
printf("%c",j-32);
else
printf("%c",j);
}
if(p1==3)
printf("*");

}

}

if(p3==2){
for(j=in[i+1]-1;j>in[i-1];j--)
for(m=0;m<p2;m++){
if(p1==1)
printf("%c",j);
if(p1==2){
if(j>60)
printf("%c",j-32);
else
printf("%c",j);
}
if(p1==3)
printf("*");

}

}

}

int main(){
scanf("%d%d%d",&p1,&p2,&p3);
scanf("%s",&in);
for(i=0;i<1000;i++){
if(judge()==1)
break;
if(judge()==2)
printf("%c",in[i]);
if(judge()==3)
function();
}

return 0;
}

• @ 2016-02-15 09:08:45

Pascal AC
var s,x:ansistring;
p1,p2,p3,i,j,k:longint;
begin
x:='';
for i:=1 to length(s) do
if s[i]='-' then begin
if ((s[i-1]>='a')and(s[i+1]<='z'))or((s[i-1]>='0')and(s[i+1]<='9')) then
begin
if ord(s[i+1])<=ord(s[i-1]) then x:=x+s[i];
if ord(s[i+1])-1>ord(s[i-1]) then begin
if p1=1 then
if p3=1 then begin
for k:=ord(lowercase(s[i-1]))+1 to ord(lowercase(s[i+1]))-1 do
for j:=1 to p2 do
x:=x+chr(k);
end
else begin
for k:=ord(lowercase(s[i+1]))-1 downto ord(lowercase(s[i-1]))+1 do
for j:=1 to p2 do
x:=x+chr(k);
end;
if p1=2 then
if p3=1 then begin
for k:=ord(upcase(s[i-1]))+1 to ord(upcase(s[i+1]))-1 do
for j:=1 to p2 do
x:=x+chr(k);
end
else begin
for k:=ord(upcase(s[i+1]))-1 downto ord(upcase(s[i-1]))+1 do
for j:=1 to p2 do
x:=x+chr(k);
end;
if p1=3 then
for k:=ord(upcase(s[i-1]))+1 to ord(upcase(s[i+1]))-1 do
for j:=1 to p2 do
x:=x+'*';
end;
end
else x:=x+s[i];
end
else x:=x+s[i];
write(x);
end.

• @ 2015-11-02 09:54:21

var i,j,n,m,k,l,r,x,y,z:longint;
s:string;
begin
s:=' '+s+' ';
for i:=2 to length(s)-1 do
begin
if (i=2)and(s[i]='-') then write(s[i]) else
if (s[i]='-')and(s[i-1]='-') then write(s[i]) else
if (i=length(s)-1)and(s[i]='-') then write(s[i]) else
begin
l:=ord(s[i-1]);
r:=ord(s[i+1]);
if s[i]<>'-' then write(s[i]) else
begin
if l>=r then begin write(s[i]); l:=0; r:=0; end else
if l+1=r then begin l:=0; r:=0; end else
if (l<60)and(r>60) then begin write(s[i]); l:=0; r:=0; end else
if (l>60)and(r<60) then begin write(s[i]); l:=0; r:=0; end else
begin
if x=3 then
for j:=1 to (r-l-1)*y do write('*') else begin
if x=2 then
if (l>96)and(l<123)and(r>96)and(r<123) then
begin l:=l-32; r:=r-32; end;
if z=2 then
for j:=r-1 downto l+1 do
for k:=1 to y do write(chr(j))
else
for j:=l+1 to r-1 do
for k:=1 to y do write(chr(j)); end;
end;
end;
end;
end;
end.

• @ 2015-11-01 22:02:34

//恶心的细节
var p1,p2,p3:longint;
s:string;
i,j,n1,n2,k,t,min:longint;
function judge(p,q:char):longint;
begin
if (((ord(p)>=48) and (ord(p)<=57) and (ord(q)>=97) and (ord(q)<=122))
or ((ord(q)>=48) and (ord(q)<=57) and (ord(p)>=97) and (ord(p)<=122))) then exit(-1);
if (ord(p)+2)<=(ord(q)) then exit(1);
if (ord(p)+1)=(ord(q)) then exit(0);
if ((ord(p))>=(ord(q))) then exit(-1);
end;
begin
if p1=1 then
begin
for j:=x to y do
for k:=1 to p2 do
begin
write(chr(j));
end;
end;
if p1=2 then
begin
for j:=x to y do
for k:=1 to p2 do
begin
write(upcase((chr(j))));
end;
end;
end;
begin
if p1=1 then
begin
for j:=y downto x do
for k:=1 to p2 do
begin
write(chr(j));
end;
end;
if p1=2 then
begin
for j:=y downto x do
for k:=1 to p2 do
begin
write(upcase((chr(j))));
end;
end;
end;
begin
n1:=ord(p)+1;
n2:=ord(q)-1;
if p1=3 then
begin
for j:=n1 to n2 do
for k:=1 to p2 do
begin
write('*');
end;
end;
if (ord(p)>=ord('0')) and (ord(p)<=ord('9')) and (p1<>3) then
begin
if p3=1 then
begin
for j:=n1 to n2 do
for k:=1 to p2 do
begin
write(chr(j));
end;
end
else if p3=2 then
begin
for j:=n2 downto n1 do
for k:=1 to p2 do
begin
write(chr(j));
end;
end;
end;
if (ord(p)>=ord('a')) and (ord(p)<=ord('z')) and (p3=1) and (p1<>3) then add1(n1,n2);
if (ord(p)>=ord('a')) and (ord(p)<=ord('z')) and (p3=2) and (p1<>3) then add2(n1,n2);
end;
begin
min:=1;
while s[min]='-' do
begin
write('-');
inc(min);
end;
for i:=min to length(s)-1 do
begin
if s[i]='-' then
begin
if judge(s[i-1],s[i+1])=1 then add(s[i-1],s[i+1]);
if judge(s[i-1],s[i+1])=0 then s[i]:=' ';
if judge(s[i-1],s[i+1])=-1 then
begin
t:=i;
while s[t]='-' do
begin
write('-');
inc(t);
end;
end;
end
else write(s[i]);
end;
if s[length(s)]='-' then write('-')
else write(s[length(s)]);
writeln;
end.

ID
1379

6

5989

1615

27%

10