[HDOJ 1039] Easier Done Than Said? (基础,字符串) .
来源:互联网 发布:js字符串去空格 编辑:程序博客网 时间:2024/05/16 16:17
先贴上在VC6.0上运行无误但在HDOJ后台海量测试数据通之下无法通过的代码,以便以后分析错误原因。
#include <iostream>using namespace std;bool isVowel(char letter){switch(letter){case 'a':case 'e':case 'i':case 'o':case 'u':return true;default:return false;}}bool isSame(char ch_1,char ch_2){if(ch_1 == ch_2 && (ch_1 != 'e' && ch_1 != 'o'))return true;elsereturn false;}bool allSame(char ch_1,char ch_2,char ch_3){if( isVowel(ch_1) && isVowel(ch_2) && isVowel(ch_3) \|| ((!isVowel(ch_1)) && (!isVowel(ch_2)) && (!isVowel(ch_3)) ))return true; elsereturn false;}bool isAcceptable(char *pwd){char *pBegin,*pCur,*pNext;int vNum;int len = strlen(pwd);if(len < 3){if(len == 1 && isVowel((char)pwd[0]))return true;if(len == 2 && isSame(pwd[0],pwd[1]))return true;else return false;}else{ pBegin = pwd;pCur = pwd + 1;pNext = pwd + 2;char *pEnd = pwd + len;//最后一个字符串的下一位为结束点vNum = 0;while(pNext != pEnd){if(isVowel(*pBegin))++vNum;if(allSame(*pBegin,*pCur,*pNext))//三个连续的字母return false;if(isSame(*pBegin,*pCur) || isSame(*pCur,*pNext)){ //两个连续的字母相同 return false;}else{pBegin++;pCur++;pNext++;}}if(vNum == 0) //一个元音都没有 return false;elsereturn true;}}int main(){char pwd[1000];while(cin >> pwd && (strcmp(pwd,"end") != 0)){if(isAcceptable(pwd)){cout << "<" << pwd << "> is acceptable." << endl;}else{cout << "<" << pwd << "> is not acceptable." << endl;}}}
版本2:更为简洁,少了非常多的函数调用开销,效率较之前版本有所提升。不过仍旧不能通过OJ的测试。
#include <iostream>using namespace std;bool isVowel(char letter){switch(letter){case 'a':case 'e':case 'i':case 'o':case 'u':return true;default:return false;}}bool notVowel(char ch){if(!isVowel(ch))return true;elsereturn false;}bool isAcceptable(char *pwd){ int len = strlen(pwd); int n_vowel = 0;if(1 == len && isVowel(pwd[0]))return true;for(int i = 1; i < len; ++i){if(isVowel(pwd[i]))++n_vowel;if(pwd[i-1] == pwd[i] && (pwd[i-1] != 'e') && (pwd[i-1] != 'o')) //两个连续并且相同的字母return false;if(isVowel(pwd[i-1]) && isVowel(pwd[i]) && isVowel(pwd[i+1])) //三个全是元音return false;if(notVowel(pwd[i-1]) && notVowel(pwd[i]) && notVowel(pwd[i+1])) //三个全是辅音return false;}if(!n_vowel)return false;elsereturn true;}int main(){char pwd[1000];while(cin >> pwd && (strcmp(pwd,"end") != 0)){if(isAcceptable(pwd)){cout << "<" << pwd << "> is acceptable." << endl;}else{cout << "<" << pwd << "> is not acceptable." << endl;}}}
网友答案:
54406992012-03-01 10:48:22Accepted103915MS256K936 BC++ajioy#include <iostream>#include <string>using namespace std;int isVowel(char *pwd,int i){return (pwd[i] == 'a' || pwd[i] == 'e' || pwd[i] == 'i' || pwd[i] == 'o' || pwd[i] == 'u');}int main(){ char pwd[1000]; char str[2][30] = {"not acceptable.","acceptable."};while(cin >> pwd && ( strcmp(pwd,"end") != 0)){ int len = strlen(pwd); int flag1=0,flag2=1,flag3=1; for(int i = 0; i < len; ++i) { if(isVowel(pwd,i)) { flag1 = 1;if(i < len - 2 && isVowel(pwd,i+1) && isVowel(pwd,i+2) ) flag2 = 0;if(i < len - 1 && pwd[i] == pwd[i+1] && (pwd[i] != 'e' && pwd[i] != 'o')) flag3 = 0; } else { if(i < len - 2 && !isVowel(pwd,i+1) && !isVowel(pwd,i+2)) flag2 = 0; if(i < len - 1 && pwd[i] == pwd[i+1]) flag3 = 0; } } cout << "<" << pwd <<"> is " << str[flag1 && flag2 && flag3] << endl;}}
- [HDOJ 1039] Easier Done Than Said? (基础,字符串) .
- HDOJ 1039 Easier Done Than Said? 简单的字符串处理
- HDOJ 1039 Easier Done Than Said? 简单的字符串处理
- HDOJ/HDU 1039 Easier Done Than Said?(字符串处理~)
- ACM--元辅音--HDOJ 1039--Easier Done Than Said?--字符串
- hdoj 1039 Easier Done Than Said?
- HDOJ 1039 Easier Done Than Said?
- hdoj 1039 Easier Done Than Said?
- hdoj-1039Easier Done Than Said?
- HDOJ 1039 Easier Done Than Said?
- hdoj 1039 Easier Done Than Said?(水水的)
- hdoj 1039 Easier Done Than Said?(水题)
- hdoj Easier Done Than Said?
- hdu 1039 Easier Done Than Said? 字符串
- HDU--1039:Easier Done Than Said? (字符串)
- Easier Done than Said?(字符串问题)
- HDU-1039-Easier Done Than Said?(简单字符串处理)
- hdu 1039 Easier Done Than Said?(字符串模拟)
- 开发管理 CheckLists(9) -组织项目资源
- 解决登陆问题
- $(document)、$("p").hide(1000)、$("p.intro")、$("p#demo")、jquery属性选择器
- 编程之美2.14求子数组之和的最大值
- extern与static用法
- [HDOJ 1039] Easier Done Than Said? (基础,字符串) .
- Android4.0 多点触摸屏新手入门指南
- 经典古语
- android java获得root权限调用linux命令
- 获取机器的hostid准备生成license
- 3D(三维变分同化)模式的安装和运行(一)
- char、varchar和varchar2的区别(zt)
- Spring学习之Bean装配、生命周期。。
- Ubuntu10.04 32位编译Android 4.0源码