[JLOI2008]提示问题
题目描述
最近在JLOI网上的一个流行游戏中,选手要回答很难的问题。假如在规定时间内不能回答,系统将给出1个提示,之后再依次给出第2,3个提示。出现在答案中的是字母和下列字符:
'.',',',':',';','!','?','-'和空格(空格不会在开头和结尾出现)
字母是指:小写字母'a'...'z' 大写字母 'A'...'Z',其中aeiouAEIOU是元音字母。
生成提示的规则:
第1个提示:简单的将所有字母换成'.'即可;
第2个提示:从第1个提示而来,将所有字母的个数求出,再将总个数除以三,得到的最接近商的自然数N,将第1个提示中的前N个字母显示;
第3个提示:从第2个提示而来,将剩下的元音字母显示。假如没有可显示的元音字母,则从第1个提示而来,即我们将前2/3的字母显示(同样如不能被3整除则取最接近的整数)。
输入输出格式
输入格式:仅一行,给出问题,问题字符数最多不超过50
输出格式:三行:按规则输出的三行提示
输入输出样例
思路
模拟;
代码
1 #include<cmath> 2 #include<cstdio> 3 #include<cstring> 4 #include<iostream> 5 using namespace std; 6 int n,m,l,r,ok; 7 char ch[60]; 8 9 int main(){ 10 gets(ch); 11 l=strlen(ch); 12 for(int i=0;i<l;i++){ 13 if(isalpha(ch[i])) putchar('.'),m++; 14 else putchar(ch[i]); 15 } 16 17 putchar('\n'); 18 19 n=round(m/3.0); 20 for(int i=0,j=0;i<l;i++){ 21 if(isalpha(ch[i])){ 22 if(j<n) putchar(ch[i]),j++,r=i; 23 else{ 24 if(ch[i]=='a'||ch[i]=='A'||ch[i]=='e'||ch[i]=='E'||ch[i]=='i'||ch[i]=='I'||ch[i]=='o'||ch[i]=='O'||ch[i]=='u'||ch[i]=='U') ok++; 25 putchar('.'); 26 } 27 } 28 else putchar(ch[i]); 29 } 30 31 putchar('\n'); 32 33 if(ok){ 34 for(int i=0,j=0;i<l;i++){ 35 if(isalpha(ch[i])){ 36 if(j<n) putchar(ch[i]); 37 else{ 38 if(ch[i]=='a'||ch[i]=='A'||ch[i]=='e'||ch[i]=='E'||ch[i]=='i'||ch[i]=='I'||ch[i]=='o'||ch[i]=='O'||ch[i]=='u'||ch[i]=='U') putchar(ch[i]); 39 else putchar('.'); 40 } 41 j++; 42 } 43 else putchar(ch[i]); 44 } 45 } 46 else{ 47 n=round(m*2.0/3.0); 48 for(int i=0,j=0;i<l;i++){ 49 if(isalpha(ch[i])){ 50 if(j<n) putchar(ch[i]),j++; 51 else putchar('.'); 52 } 53 else putchar(ch[i]); 54 } 55 } 56 57 putchar('\n'); 58 59 return 0; 60 }