Easier Done Than Said?
Problem Description
Password security is a tricky thing. Users prefer simple passwords that are easy to remember (like buddy), but such passwords are often insecure. Some sites use random computer-generated passwords (like xvtpzyo), but users have a hard time remembering them and sometimes leave them written on notes stuck to their computer. One potential solution is to generate "pronounceable" passwords that are relatively secure but still easy to remember.
FnordCom is developing such a password generator. You work in the quality control department, and it's your job to test the generator and make sure that the passwords are acceptable. To be acceptable, a password must satisfy these three rules:
It must contain at least one vowel.(它必须包含至少一个元音。)
It cannot contain three consecutive vowels or three consecutive consonants.(它不能包含三个连续元音或三个连续辅音。)
It cannot contain two consecutive occurrences of the same letter, except for 'ee' or 'oo'.(除了“ee”或“oo”之外,它不能包含两个连续出现的相同字母。)
(For the purposes of this problem, the vowels are 'a', 'e', 'i', 'o', and 'u'; all other letters are consonants.) Note that these rules are not perfect; there are many common/pronounceable words that are not acceptable.(就这个问题而言,元音是‘a’、‘e’、‘i’、‘o’和‘u’;所有其他字母都是辅音。)请注意,这些规则并不完美;有许多常见/可读的单词是不可接受的。
Input
The input consists of one or more potential passwords, one per line, followed by a line containing only the word 'end' that signals the end of the file. Each password is at least one and at most twenty letters long and consists only of lowercase letters.
Output
For each password, output whether or not it is acceptable, using the precise format shown in the example.
Sample Input
a
tv
ptoui
bontres
zoggax
wiinq
eep
houctuh
end
Sample Output
<a> is acceptable.
<tv> is not acceptable.
<ptoui> is not acceptable.
<bontres> is not acceptable.
<zoggax> is not acceptable.
<wiinq> is not acceptable.
<eep> is acceptable.
<houctuh> is acceptable.
我的解题思路
1.对于上述三个条件,每个条件设置一个布尔类型,若三个同时满足则输出正确,反之则错误。
2.把输入的字符串转换为字符数组,更容易比较。
3.用一个布尔类型的类来判断每个数组中的字符是否有元音字母。
4.条件2,3调用类来判断是否符合,条件二比较连续的三个字符是否相同元音或辅音,条件三比较连续相同两个字符是否是除e和o以外的字符。
我的程序
import java.util.Scanner;
public class Main {
public static boolean isyuan(char s){
char[] yuan={'a','e','i','o','u'};
for(int i=0;i<5;i++)
if(yuan[i]==s)
return true;
return false;
}
public static void main(String[] args) {
Scanner scanner =new Scanner(System.in);
while(scanner.hasNext()){
String string = scanner.next();
if(string.equals("end"))
break;
int len=string.length();
char[] str = string.toCharArray();
boolean tag1=false,tag2=true,tag3=true;
for(int i=0;i<len;i++)
if(isyuan(str[i])){
tag1=true;
break;
}
if(tag1){
for(int i=0;i<len-2;i++){
if((isyuan(str[i])&&isyuan(str[i+1])&&isyuan(str[i+2]))||(!isyuan(str[i])&&!isyuan(str[i+1])&&!isyuan(str[i+2]))){
tag2=false;
break;
}
}
}
if(tag2&&tag1){
for(int i=0;i<len-1;i++){
if(str[i]==str[i+1]){
if(str[i]!='e'&&str[i]!='o'){
tag3=false;
break;
}
}
}
}
if(tag1&&tag2&&tag3)
System.out.println("<"+string+">"+" is acceptable.");
else {
System.out.println("<"+string+">"+" is not acceptable.");
}
}
}
}