救命,为啥输出明明就和7样例一样,就是过不了呢
查看原帖
救命,为啥输出明明就和7样例一样,就是过不了呢
257318
BugManMax楼主2024/6/19 10:00
#include<bits/stdc++.h>
using namespace std;

bool isnumble = false;
string s1,s2;

void kz(char a,char b,int p1,int p2,int p3){
	string s;
	for(char i=a+1;i<b;i++){//遍历a-b之间的数字或字母 
		for(int j=0;j<p2;j++){//需要重复的次数 
			if(p1==3){
				s+='*';
			}else{
				if(isnumble){//是数字直接输出 
					s+=i;
				}else{
					if(p1==2){//字母变大写 
						s+=i-32;
					}else{
						s+=i;
					}
				}	
			}
		}
	}
	if(p3==2){//反转 
		reverse(s.begin(),s.end());
	}
	s2+=s;
}

int main(){
	//freopen("out.out","w",stdout);
	int p1,p2,p3;
	cin>>p1>>p2>>p3;
	cin>>s1;
	int isy[105]={0};
	for(int i=0;i<s1.length();i++){
		if(s1[i]=='-'){//遇到'-'判断前方与当前字符是否用过 ,避免前面为'-' 
			if(isy[i-1]==1||i==s1.length()-1){//前方字符已经使用 
				s2+='-';
				isy[i] = 1;
			}else{
				if(s1[i-1]>=s1[i+1]){//判断后一个是否为'-',或者前方大于等于后方 
					s2+='-';
				}else if((s1[i-1]>='0'&&s1[i-1]<='9'&&s1[i+1]>='0'&&s1[i+1]<='9')){//前后都是数字 
					isnumble = true;
					kz(s1[i-1],s1[i+1],p1,p2,p3);
				}else if((s1[i-1]>='a'&&s1[i-1]<='z'&&s1[i+1]>='a'&&s1[i+1]<='z')){//前后都是字母 
					isnumble = false;
					kz(s1[i-1],s1[i+1],p1,p2,p3);
				}else{
					s2+='-';
				}	
				isy[i] = 1;//当前'-' 被使用 
				isy[i-1] = 1;//前面被使用 
			}
		}else{//正常输出 
			s2+=s1[i];
		}
	}
	cout<<s2;
	return 0;
} 
2024/6/19 10:00
加载中...