首页 > ACM题库 > 九度OJ > 九度-1175-打牌[解题代码]
2013
12-13

九度-1175-打牌[解题代码]

题目来源:2010年北京邮电大学网院研究生机试真题

题目描述:

牌只有1到9,手里拿着已经排好序的牌a,对方出牌b,用程序判断手中牌是否能够压过对方出牌。 
规则:出牌牌型有5种  
[1]一张 如4 则5…9可压过
[2]两张 如44 则55,66,77,…,99可压过
[3]三张 如444 规则如[2]
[4]四张 如4444 规则如[2]
[5]五张 牌型只有12345 23456 34567 45678 56789五个,后面的比前面的均大。

输入:

输入有多组数据。
每组输入两个字符串(字符串大小不超过100)a,b。a字符串代表手中牌,b字符串代表处的牌。

输出:

压过输出YES 否则NO。

样例输入:
12233445566677
33
样例输出:
YES

java 代码如下:
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;


public class Main {
	static int arr[];
	public static void main(String[] args) {
		Scanner s = new Scanner(System.in);
		while(s.hasNext()){
			String str = s.next();
			String b = s.next();
			arr = new int[10];
			int len = str.length();
			for(int i=0; i<len ;i++)
				arr[str.charAt(i)-'0']++;
			int len2 = b.length();
			int start = b.charAt(0)-'0';
			int flag = 0;
			if(len2 < 5){
				for(int i=start+1; i<10; i++)
					if(arr[i] >= len2){
						flag = 1;
						break;
					}
			}else{
				for(int i=start+1; i<6; i++){
					if(arr[i]>0 &&arr[i+1]>0&&arr[i+2]>0&&arr[i+3]>0&&arr[i+4]>0)
						flag = 1;
				}
			}
			if(flag == 0)
				System.out.println("NO");
			else
				System.out.println("YES");
			
	}

}
}

/**************************************************************
	Problem: 1175
	User: coder
	Language: Java
	Result: Accepted
	Time:1930 ms
	Memory:31828 kb
****************************************************************/


  1. 如果两个序列的最后字符不匹配(即X [M-1]!= Y [N-1])
    L(X [0 .. M-1],Y [0 .. N-1])= MAX(L(X [0 .. M-2],Y [0 .. N-1]),L(X [0 .. M-1],Y [0 .. N-1])
    这里写错了吧。