容易的题

判断考试题目难易的算法实现
博客围绕判断K老师出题难易的算法展开。题目要求根据输入字符串中能否按顺序找到E、A、S、Y四个字母来判断题目难易。算法基本思想是设计辅助字符串和两个指针进行匹配,根据指针指向位置输出结果。还给出了C++和Java版代码实现。

题目描述

大家都很关心考试的难易程度。K老师出题有一个规律,在出题之前,他会随机写下一个字符串,只要在这个字符串中能按顺序找到E,A,S,Y四个字母,他出题就会比较简单。你拿到了字符串,请你告诉别人题目难不难吧。

输入格式:

输入的数据有多组,每组占一行,由一个字符串组成(字符串的长度不超过1000)。

输出格式:

对于每组输入数据,输出一行,对应一个要求的答案(题目简单就输出easy,难就输出difficult)

输入样例:

eAsy
           SEoAtSNY

输出样例:

difficult
            easy

算法的基本思想

由于要比较的内容已经确定为EASY,那么可以另外设计一个辅助字符串,里面存储的即是这四个字母,设计两个指针i,j,指针i指向给定的字符串,指针j指向辅助的字符串,当配时,指针i,j均向后移动一位,则

      (1)若i指向了给定了字符串的尾部,而j未指向尾部,那么输出difficult;

      (2)若j指向了辅助字符串的尾部,则输出easy。

        在本题中,我们加入一个输入的字符串的个数来统计随机的个数。

代码实现

        C++版

#include <iostream>
#include <string>
#include <vector>
#include <string>

using namespace std;

bool match(vector<char> &a)
{
    int i,j=0;
    char tmp[4]={'E','A','S','Y'};
    for (i=0;i<a.size();i++)
    {
        if(a[i]==tmp[j])
            j++;
        if(j==4)
            break;
    }
    if (j==4)         //判断EASY 四个字符是否全部找到,找到返回true,否则返回false
        return true;
    else
        return false;
}

int main()
{
    string word;
    vector<char>ver;
    while(cin>>word)
    {
        ver.clear();                      //每次重新输入清空容器
        for(int i=0;i<word.length();i++)
            ver.push_back(word.at(i));
        if(match(ver))
            cout<<"easy"<<endl;
        else
            cout<<"difficult"<<endl;
    }
    return 0;
}

Java版

import java.util.Scanner;

public class EasyProblem {

	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		while(scan.hasNext()) {
			String str= scan.nextLine();
			if( match(str) )
				System.out.println("easy");
			else
				System.out.println("difficult");
		}
	}
	
	public static Boolean match(String s) {
		int i,j=0;
	    String easy = "EASY";
	    for (i=0;i<s.length();i++) {
	        if(s.charAt(i) == easy.charAt(j))
	            j++;
	        if(j>3)
	            break;
	    }
	    if (j<=3)         //判断EASY 四个字符是否全部找到,找到返回true,否则返回false
	        return false;
	    else
	        return true;
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值