1. 程式人生 > >【 OJ 】 HDOJ1039 18年11月17日19:40 [ 36 ]

【 OJ 】 HDOJ1039 18年11月17日19:40 [ 36 ]

ummm.....這題也是泡泡水題....判斷有點煩

AC程式碼:

# include<iostream>
# include <string>
using namespace std;
char v[5] = { 'a', 'e', 'i', 'o', 'u' };// 母音'a', 'e', 'i', 'o', and 'u';
//規則 1 至少一個母音  2 不能出現連續3個母音3個子音 4 不能出現2個連續的相同字母 除了 ee oo
void out(string &str, bool isok) {
	if (isok) {
		cout << "<" << str << ">" << " is acceptable." << endl;
	}
	else {
		cout << "<" << str << ">" << " is not acceptable." << endl;
	}
}
bool IsOk(string&str) {
	bool vv=false;
	int vn, cn, cl;
	char pre='1';
	int i,j;
	bool isv;
	vn = cn = 0;
	for (i = 0; i < str.length(); ++i) {
		isv = false;
		if (str[i] == pre) {//查連續的
			if (str[i] == 'e' || str[i] == 'o') //ee oo 合法
				;//do nothing
			else
				return false;
		}
		for (j = 0; j < 5; ++j) {
			if (str[i] == v[j])
			{
				vv = true;//判全域性
				isv = true;//判當前數是否為母音
				cn = 0;//子音個數重置
				vv++;
				vn++;
				if (vn == 3)
					return false;
				break;
			}
		}
		if (!isv) {//是子音
			vn = 0;//母音個數重置
			cn++;
			if (cn == 3) {
				return false;
			}
		}
		pre = str[i];
	}
	if (vv)
		return true;
	else
		return false;
}
int main(void) {
	string letter;
	cin >> letter;
	while (strcmp(letter.c_str(),"end")) {
		out(letter, IsOk(letter));
		cin >> letter;
	}
	system("pause");
	return 0;
}