玄关,10pts:是string或换行的问题吗
查看原帖
玄关,10pts:是string或换行的问题吗
784825
KrisXJ楼主2024/8/29 20:08

Rt,样例、题解区和讨论区的hack数据都能通过,但是莫名只能得10分,求大佬指点

#include <bits/stdc++.h>
using namespace std;

string s;

bool isalp(char x)//检查是否为字母
{
	if('a' <= x && x <= 'z' || 'A' <= x && x <= 'Z')
	{
		return true;
	}
	else return false;
}

bool isvowel(char x)//检查是否为元音
{
	if(x == 'a' ||x == 'e' ||x == 'i' ||x == 'o' ||x == 'u' ||x == 'A' ||x == 'E' ||x == 'I' ||x == 'O' ||x == 'U' )
		return true;
	else return false;
}



int main()
{
	getline(cin,s);
	int L = s.size();
	
	int cnt;
	
	for(int i=0;i<L;i++)
	{
		if('a' <= s[i] && s[i] <= 'z' || 'A' <= s[i] && s[i] <= 'Z')
		{
			cout<<'.';
			cnt++;
		}
		else cout<<s[i];
	}
	 
	cout<<"\n";
	
	double Q; //计算1/3与2/3
	Q = 1.0 * cnt / 3;
	int N = round(Q);
	int N2 = round(2.0*cnt/3);
	int f=0;
	int ind=0;
	for(int i=0;i<L;i++)
	{
		if(f < N)
		{
			ind++;
			if(isalp(s[i]))
			{
	   			cout<<s[i];
	   			f++;
			}
			else
			cout<<s[i];
		}
		else
		{
			if(!isalp(s[i]))
				cout<<s[i];
			else
				cout<<'.';
		}
		
	}
	 
	cout<<"\n";
	
	bool flag; //检查是否有元音字母
	
	for(int i=ind;i<L;i++)
	{
		if(isvowel(s[i]))
		{
			//cout<<endl<<"vowel"<<endl;
			flag=1;break;
		}
	}
	
	if(flag)
	{
		int f=0;

		for(int i=0;i<L;i++)
		{
			if(f < N)
			{
				if(isalp(s[i]))
				{
		   			cout<<s[i];
		   			f++;
				}
				else
				cout<<s[i];
			}
			else
			{

				if(isvowel(s[i]))cout<<s[i];
				else
					if(isalp(s[i])) cout<<".";
					else
						cout<<s[i];
				
			}
		}
		
	
		 
		cout<<"\n";
	}
	else
	{
		f=0;
		for(int i=0;i<L;i++)
		{
			if(f < N2)
			{
				ind++;
				if(isalp(s[i]))
				{
		   			cout<<s[i];
		   			f++;
				}
				else
					cout<<s[i];
			}
			else
			{
				if(!isalp(s[i]))
					cout<<s[i];
				else cout<<'.';	
			}
			
		}
		 
		cout<<"\n";
	}
	return 0;
}
2024/8/29 20:08
加载中...