思路来源:老师博客
在此向老师学习,自己多努力!
一副扑克牌有54张牌,分别是红桃,黑桃,方片,梅花各13张,以及大小王,现在Alex有一副牌
只剩下53张了,给出这些牌,请问少了哪张牌。
牌的表示方法:
大王: Joker 小王: joker
其余的牌用花色+牌面大小表示,花色表示如下:
红桃: Heart 黑桃: Spade 方片: Diamond 梅花: Club
2~10的牌面直接用2,3,4,5,6,7,8,9,10 表示,其余的:
A: Ace J: Jack Q: Queen K: King
比如方片J用 DiamondJack 表示, 红桃A用 HeartAce表示
输入
一行53个字符串,表示53张牌
输出
一行输出少的那张牌
思路分析:
利用集合set做比较好,老师也是用的set 集合特点无序且元素唯一,容易删除也容易添加,不用考虑元素是否重复的问题, 关于数据结构,建议使用字符串类型表示
我们先将集合中添加所有的元素牌,然后输入53张牌,逐一抹去,剩下的一张牌就是少的那张牌了
代码如下:(Java实现)
package Exercises;
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;
public class testBailian4020ThelackOfPocket {
public static void main(String[] args) {
String[]color=new String[]{ "Heart", "Spade", "Diamond", "Club"};
String []point=new String[]{ "Ace" , "2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack",
"Queen", "King"};
Set<String> set=new HashSet<String>();
set.add("Joker");
set.add("joker");
//组合牌并且放入集合当中
for (int i = 0; i < color.length; i++) {
for (int i1 = 0; i1 < point.length; i1++) {
set.add(color[i]+point[i1]);
}
}
//从键盘输入,注意是使用的next()函数 ,遇到空格自动转为下一次输入
String instr;
Scanner s=new Scanner(System.in);
for (int i = 0; i < 53; i++) {
instr=s.next();
set.remove(instr);//抹去集合中存在的牌
}
//foreach遍历集合
for (String outStr:set
) {
System.out.println(outStr);
}
}
}
测试输入如下:
ClubQueen Club2 ClubAce SpadeAce Club10 Heart2 HeartJack Heart6 Heart4 Spade6 Diamond6 Spade7 Heart7 Spade10 DiamondJack SpadeKing Heart10 Spade2 Spade9 Diamond5 Club9 Spade8 DiamondAce Heart9 Heart5 Club8 Club7 ClubKing Club6 Club5 Club3 SpadeQueen Spade3 HeartAce SpadeJack Joker DiamondQueen Club4 Spade4 Diamond4 HeartQueen HeartKing Diamond2 Diamond10 DiamondKing Diamond3 Heart3 Diamond7 Diamond8 Spade5 ClubJack Heart8 Diamond9
结果:
joker