字符串 HDU 1039

规则:

1.必须至少包含一个元音字母。a e i o u

2.不能包含三个连续元音或者连续辅音字母。

3.不能包含两个连续字母,除了‘ee‘和‘oo‘。

PS:字母个数(1<= N <=20).

#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int is_vowel(char strIn)
{
    if(strIn == ‘a‘ || strIn == ‘e‘ ||strIn == ‘i‘ || strIn == ‘o‘ || strIn == ‘u‘)
        return 1;
    else
        return 0;
}

void main()
{
    while(1)
    {
        char strIn[21] = {‘\0‘};
        char strTemp[21] = {‘\0‘}; //字符缓存,用于判断是否连续出现相同字符
        char temp;
        int count = 0;  //统计连续相同字母个数
        int count2 = 0; //统计连续的元音或者辅音字母个数
        int vowelFlag = 0; //是否元音的标志位
        int lastIsVowel = 0; //上一个字母是否是元音的标志位 0 不是 1 是
        int sign = 0; //是否含有元音标志位
        int resultFalg = 1;
        int len; //保存输入的字符串的长度
        gets(strIn);
        len = (int)strlen(strIn);
        //先判断是否是结束查询标志
        if(strcmp(strIn, "end") == 0)
            return;
        temp = strIn[0];
        count = 1;
        count2 = 1;
        vowelFlag = is_vowel(strIn[0]);
        lastIsVowel = is_vowel(strIn[0]);
        //查找是否包含元音字母,如果遇到连续3个元音字母,辅音字母或者连续2个除了‘ee‘‘oo‘之外的相同字母,则判断为不可接受,并退出循环
        for(int i = 0; i < len; i++)
        {
            if(sign == 0)
                sign = is_vowel(strIn[i]);
            //如果出现相同的字母
            if(i > 0 && temp == strIn[i])
            {
                count++;
                if(count == 2)
                {
                    if(temp != ‘e‘ && temp != ‘o‘)
                    {
                        resultFalg = 0; //不可接收,跳出循环
                        break;
                    }
                }
            }
            //如果出现三个连续元音或连续三个辅音
            if(i > 0)
            {
                vowelFlag = is_vowel(strIn[i]);
                if(vowelFlag == lastIsVowel)
                {
                    count2++;
                    if(count2 >= 3)
                    {
                        resultFalg = 0; //不可接收,跳出循环
                        break;
                    }
                }
                else
                {
                    count2 = 1;
                    lastIsVowel = vowelFlag;
                }

            }
            temp = strIn[i];
            count = 1;

        }

        if(sign == 1 && resultFalg != 0)
        {
            printf("<%s> is acceptable.", strIn );
            printf("\n");
        }
        else
        {
            printf("<%s> is not acceptable.", strIn );
            printf("\n");
        }
    }
}

时间: 2024-11-09 03:08:57

字符串 HDU 1039的相关文章

HDU 1039[Easier Done Than Said?] 字符串处理

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1039 题目大意:给一个字符串,看是否符合密码的要求. 规则:1.至少有1个元音字母.2.不能有3个连续的元音字母或辅音字母3.不能有相同的字母连续出现(除了ee,oo) 关键思想:耐心地处理字符串 代码如下: //可优化 #include <iostream> #include <algorithm> #include <string.h> using namespace

HDU 1039(字符串判断 **)

题意是检查一个字符串是否满足三个条件: 一.至少有一个元音字母.二.不能出现三个连续的元音或三个连续的辅音.三.除了 ee 和 oo 外不能出现两个连续相同字母. 若三个条件都能满足,该字符串满足条件,有一个条件不满足则该字符串不满足条件. 但是这道题的数据......一定有元音字母,长度一定不少于 3.省去很多麻烦...... 代码如下: 1 #include <bits/stdc++.h> 2 using namespace std; 3 int main() 4 { 5 int len;

hdu 1039 - Easier Done Than Said?

题目:给你一个小写字符串,判断是否安全,安全规则如下: 1.包含元音字母:2.相邻3个元素不能都是元音或辅音:3.连续2个字母相同之能是o或e. 分析:简单题.直接模拟即可. 说明:今天有点累╮(╯▽╰)╭,要学的东西好多( ⊙ o ⊙ )啊! #include <algorithm> #include <iostream> #include <cstdlib> #include <cstring> #include <cstdio> #incl

DP题目

//HDU 4001 To Miss Our Children Time HDU 4433 locker HDU 4362 Dragon Ball[] HDU 3602 2012[] HDU 4385 Moving Bricks[] HLG 1067 QQ Farm[] HDU 4293 Groups HDU 3920 Clear All of Them I[] HDU 3466 Proud Merchants[] POJ 2923 Relocation[] HDU 3660 Alice and

HZNU Training 21 for Zhejiang Provincial Competition 2020

C - 展开字符串 HDU - 1274 处理括号优先级:栈保存所有的字符,遇到 数字+字符,数字拿出来,for一遍,字符填到栈里,遇到 )一直把栈里元素拿出来,直到 ( 为止,然后把这中间的元素保存下来,因为括号前面有系数,再for一遍,填到栈里,最后把栈清空,输出 题目数据有问题:没有判数字大于10情况. #include<cstdio> #include<iostream> #include<stack> #include<cstring> using

HDU字符串基础题(1020,1039,1062,1088,1161,1200,2017)

并不是很精简,随便改改A过了就没有再简化了. 1020. Problem Description Given a string containing only 'A' - 'Z', we could encode it using the following method: 1. Each sub-string containing k same characters should be encoded to "kX" where "X" is the only c

HDU 4162 Shape Number(字符串,最小表示法)

HDU 4162 题意: 给一个数字串(length <= 300,000),数字由0~7构成,求出一阶差分码,然后输出与该差分码循环同构的最小字典序差分码. 思路: 第一步是将差分码求出:s[i] = (s[i] - s[i+1] + 8) % 8; 第二步是求出最小字典序的循环同构差分码,我之前没注意到字符串规模..直接用set做,MLE+TLE... 正确的方式应该是一种O(n)的解法,即最小表示法.//关于最小表示法的证明与详述请参考最小表示法:) 最小表示法算法: 初始时,i=0,j=

HDU 1013 Digital Roots【字符串,水】

Digital Roots Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 79339    Accepted Submission(s): 24800 Problem Description The digital root of a positive integer is found by summing the digits of

hdu 1880 魔咒词典(字符串hash)

题目链接:hdu 1880 魔咒词典 题意: 给你一个10w的词典,让你输出对应的字段. 题解: map暴力存字符串肯定会卡内存,这里用BKDR字符串hash一下,用map映射一下. 1 #include<bits/stdc++.h> 2 #define F(i,a,b) for(int i=a;i<=b;++i) 3 using namespace std; 4 typedef unsigned long long ull; 5 6 const int N=1e5+7,seed=133