【注释详细玄关求条】80pts,WA on #9#10
查看原帖
【注释详细玄关求条】80pts,WA on #9#10
556072
wang1h楼主2024/10/2 22:41
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define ll long long
using namespace std;
const int N=55;
string s;
bool b1[N],b2[N];
int n,m,m1,m2;
bool f(char c){return(c>='A'&&c<='Z')||(c>='a'&&c<='z');}
bool g(char c){return c=='a'||c=='e'||c=='i'||c=='o'||c=='u'||c=='A'||c=='E'||c=='I'||c=='O'||c=='U';}
void pr(bool *b){for(int i=0;i<n;i++)putchar(b[i]||!f(s[i])?s[i]:'.');putchar('\n');}
//如果字符被标记 或 它不是字母,输出
void replc1(int m,bool *b){for(int i=0,j=0;j<m;i++)if(f(s[i]))b[i]=1,j++;}
//从第1位开始把m个字母替换成 '.'
void replc2(int m,bool *b){for(int i=m;i<n;i++)if(g(s[i]))b[i]=1;}
//从第m位开始到结尾把元音字母替换成 '.'
bool fd(int m){for(int i=m;i<n;i++)if(g(s[i]))return 1;return 0;}
//判断第m位开始到结尾是否有音字母
int main(){
	getline(cin,s);
	n=s.size();pr(b1);
	for(int i=0;i<n;i++)if(f(s[i]))m++;//m是字母数
	m1=m/3.0+0.5;m2=m*2.0/3.0+0.5;//前1/3和2/3的位置
	replc1(m1,b1);pr(b1);//把前1/3个字母改成'.',输出
	if(fd(m1))replc2(m1,b1),pr(b1);//如果后2/3有元音字母,标记为可显示,输出
	else replc1(m2,b2),pr(b2);//否则,把前2/3的字母标记为可显示,输出
	return 0;
}
2024/10/2 22:41
加载中...