题目链接
https://www.luogu.com.cn/problem/P1098
题记:
刚开始写的ac代码,把所有情况模拟出来…
有几种特别的样例:
1、连续几个-号 例:-------
2、数字-数字 例:0-90-90
#include<bits/stdc++.h>
using namespace std;
char str[300];
int main(){
int p1,p2,p3,i,j,k;
cin>>p1>>p2>>p3;
cin>>str;
int len=strlen(str);
if(p3==1){
for(i=0;i<len;i++){
if(str[i]=='-'){
if(str[i-1]-str[i+1]>=0||str[i+1]-str[i-1]>26||i==0||str[i-1]=='-'||str[i+1]=='-'||str[i]==len-1)
cout<<str[i];
else{
for(j=str[i-1]+1;j<=str[i+1]-1;j++){
for(k=0;k<p2;k++){
char c=j;
if(c>='0'&&c<='9'&&p1!=3)
cout<<c;
else if(p1==3)
cout<<"*";
else if(p1==1&&c>=97)
cout<<c;
else if(p1==1&&c<97)
printf("%c",c+32);
else if(p1==2&&c>=97)
printf("%c",c-32);
else if(p1==2&&c<97)
cout<<c;
}
}
}
continue;
}
cout<<str[i];
}
}
else{
for(i=0;i<len;i++){
if(str[i]=='-'){
if(str[i-1]-str[i+1]>=0||str[i+1]-str[i-1]>26||i==0||str[i-1]=='-'||str[i+1]=='-'||str[i]==len-1)
cout<<str[i];
else{
for(j=str[i+1]-1;j>=str[i-1]+1;j--){
for(k=0;k<p2;k++){
char c=j;
if(c>='0'&&c<='9'&&p1!=3)
cout<<c;
else if(p1==3)
cout<<"*";
else if(p1==1&&c>=97)
cout<<c;
else if(p1==1&&c<97)
printf("%c",c+32);
else if(p1==2&&c>=97)
printf("%c",c-32);
else if(p1==2&&c<97)
cout<<c;
}
}
}
continue;
}
cout<<str[i];
}
}
return 0;
}
下面是看了大佬的代码再写一次的代码
用了很多三目运算符来简化代码
#include<bits/stdc++.h>
using namespace std;
char str[300];
int main(){
int p1,p2,p3,i=0,k;
char a,b,c,j,p;
cin>>p1>>p2>>p3;
cin>>str;
while(str[i]){
b=str[i-1];//赋值减号前面的字符
a=str[i+1];//赋值减号后面的字符
c=str[i];//减号
if(c=='-'&&a>b&&(b>='0'&&a<='9'||b>='a'&&a<='z'))//判断是否符合条件
for(p3==1?j=b+1:j=a-1;p3==1?j<a:j>b;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",c);
i++;
}
return 0;
}