题解 CF938A 【Word Correction】

思想

首先判断是否为元音,如果是,就去看后面有多少连续的元音,一并标记(删除)然后去找下一个元音;

代码实现及注释

#include<bits/stdc++.h>
using namespace std;
#define go(i,j,n,k) for(int i=j;i<=n;i+=k)//循环偷懒
#define fo(i,j,n,k) for(int i=j;i>=n;i-=k)
#define mn 105
char a[mn];
int n;
bool b[mn];//记录是否被删除
int main(){
	cin>>n;
	go(i,1,n,1){
		cin>>a[i];
		b[i]=true;
	}
	go(i,1,n,1){
		if(b[i]){//是否被删除
			if(a[i]=='a'||a[i]=='e'||a[i]=='o'||a[i]=='i'||a[i]=='u'||a[i]=='y'){//判断是不是元音
				go(j,i+1,n,1){
					if(a[j]=='a'||a[j]=='e'||a[j]=='o'||a[j]=='i'||a[j]=='u'||a[j]=='y'){//循环看有没有连续的元音
						b[j]=false;
					}else{//只要有不是的,直接退出小循环,寻找下一组元音
						break;
					}
				}
			}
		}
	}
	go(i,1,n,1){
		if(b[i]){
			cout<<a[i];
		}
	}
	return 0;
}
NOIP2018并不是结束,而是开始
原文地址:https://www.cnblogs.com/yizimi/p/10056198.html