就按照给你的指令去做就好了,这里提几个坑点:
1.两个数字连一起是要判断的。。。我没判断WA10分
2.两个“-”连一起也要判断。。。 10分
3.有可能一开始或结尾就是“-”; 20分
4.如果你在洛谷上评测,很有可能零分,因为其数据读入极其不规范。你需要手动过滤掉多余的字符。
写的还是比较繁琐的,但能看懂
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int p1,p2,p3;
char a[10010];
void extend(char x,char y,int p,int k,int w)
{
if(w==1)
{
if(p==1)
{
for(int i=x+1;i<=y-1;i++)
{
for(int j=1;j<=k;j++)
{
if(x>=48&&x<=57&&y>=48&&y<=57)
{
int ans=i-48;
printf("%d",ans);
}
else
{
char ans=i;
printf("%c",ans);
}
}
}
}
if(p==2)
{
for(int i=x+1;i<=y-1;i++)
{
for(int j=1;j<=k;j++)
{
if(x>=48&&x<=57&&y>=48&&y<=57)
{
int ans=i-48;
printf("%d",ans);
}
else
{
char ans=i-32;
printf("%c",ans);
}
}
}
}
if(p==3)
{
for(int i=x+1;i<=y-1;i++)
{
for(int j=1;j<=k;j++)
{
printf("*");
}
}
}
}
if(w==2)
{
if(p==1)
{
for(int i=y-1;i>=x+1;i--)
{
for(int j=1;j<=k;j++)
{
if(x>=48&&x<=57&&y>=48&&y<=57)
{
int ans=i-48;
printf("%d",ans);
}
else
{
char ans=i;
printf("%c",ans);
}
}
}
}
if(p==2)
{
for(int i=y-1;i>=x+1;i--)
{
for(int j=1;j<=k;j++)
{
if(x>=48&&x<=57&&y>=48&&y<=57)
{
int ans=i-48;
printf("%d",ans);
}
else
{
char ans=i-32;
printf("%c",ans);
}
}
}
}
if(p==3)
{
for(int i=y-1;i>=x+1;i--)
{
for(int j=1;j<=k;j++)
{
printf("*");
}
}
}
}
}
bool judge(char x,char y)
{
int ans1=x;
int ans2=y;
if((ans1>=65&&ans1<=122&&ans2>=48&&ans2<=57)||(ans1>=48&&ans1<=57&&ans2>=65&&ans2<=122))
{
return true;
}
else return false;
}
int main()
{
cin>>p1>>p2>>p3;
char tmp=getchar();
while(tmp!='\n') tmp=getchar();
gets(a);
int len=strlen(a);
for(int i=0;i<len;i++)
{
if(a[i]=='-')
{
int xx=a[i-1];
int yy=a[i+1];
if(a[i-1]=='-'||a[i+1]=='-'||a[i-1]==0||a[i+1]==0||xx>=yy||judge(a[i-1],a[i+1])==true)
{
printf("-");
continue;
}
else extend(a[i-1],a[i+1],p1,p2,p3);
}
else
{
printf("%c",a[i]);
}
}
return 0;
}