题解:UVA576 Haiku Review
UVA576 Haiku Review 俳句判断
题目大意
多组数据,每组数据给定三句诗,判断它是否是俳句。
三句诗成俳句,当且仅当每句诗中的音节数分别为
为了简化问题,在本题中,一个单词中任意长度的连续元音字母认为是一个音节。(元音字母有
解题思路
直接按照题意模拟即可。
输入部分,这里使用了 getline 获取整行,并采用 stringstream 分割出每个单词。
代码
// Problem: Haiku Review
// Contest: Luogu
// URL: https://www.luogu.com.cn/problem/UVA576
// Memory Limit: 0 MB
// Time Limit: 3000 ms
// Create Time: 2024-02-05 20:27:36
#include<iostream>
#include<string>
#include<cstring>
#include<cstdio>
#include<stack>
#include<map>
#include<queue>
#include<algorithm>
#include<sstream>
using namespace std;
/*================*/
string s,poem[5];
int cnt[5],ans[5]={0,5,7,5};
bool f;
bool isvol(char c) { //判断是否是元音
return c=='a'||c=='e'||c=='i'||c=='o'||c=='u'||c=='y';
}
int main() {
//cin.ignore(1024,'\n');
while (getline(cin,s)&&s!="e/o/i") { //判断输入是否结束
stringstream ss(s);
for (int i=1;i<=3;i++)
getline(ss,poem[i],'/');
memset(cnt,0,sizeof(cnt));
for (int i=1;i<=3;i++) {
for (int j=0;j<poem[i].length()-1;j++)
if (isvol(poem[i][j])&&(!isvol(poem[i][j+1]))) //当前字母是元音,后一个字母不是,音节数+1
cnt[i]++;
if (isvol(poem[i][poem[i].length()-1])) cnt[i]++; //判断最后一个字母
}
f=1;
for (int i=1;i<=3;i++)
if (cnt[i]!=ans[i]) {
cout<<i<<"\n";
f=0;
break;
}
if (f) cout<<"Y\n";
}
return 0;
}