zoukankan      html  css  js  c++  java
  • Java实现 蓝桥杯VIP 算法提高 洗牌

    算法提高 洗牌
    时间限制:1.0s 内存限制:256.0MB

    问题描述
      小弱T在闲暇的时候会和室友打扑克,输的人就要负责洗牌。虽然小弱T不怎么会洗牌,但是他却总是输。
      渐渐地小弱T发现了一个规律:只要自己洗牌,自己就一定会输。所以小弱T认为自己洗牌不够均匀,就独创了一种小弱洗牌法。
      小弱洗牌法是这样做的:先用传统洗牌法将52张扑克牌(1到K各四张,除去大小王)打乱,放成一堆,然后每次从牌堆顶层拿一张牌。如果这张牌的大小是P(1到K的大小分别为1到13),那么就把这张牌插入到当前手中第P张牌的后面。如果当前手中不足P张牌,那么就把这张牌放在最后。
      现在给你一对已经被打乱的牌,请你用小弱洗牌法进行洗牌,然后输出最后生成的序列。
      注意:小弱可能在第一次洗牌时弄丢了某些牌,这时请你输出一个-1来提醒他牌的数目不够。
    输入格式
      测试数据的输入含N个用空格隔开的字符串表示牌堆从顶至底的每张扑克(1到K中的某个)。可能有多行。
    输出格式
      如果N为52,输出用小弱洗牌法洗牌后的序列,每个字符串用空格隔开。
      否则请输出一个-1.
    样例输入
    4 6 K Q 5 1 Q 9 7 9 K 3 J 1 2 3 5
    2
    3 5 7 Q 7 10 8 4 9 7 8 9 4
    10 6 2 8 2 10 10 Q 5 K J 1
    J 8 3 K 4 1 6 J 6
    样例输出
    4 1 1 1 3 4 6 6 2 2 2 5 J 3 8 4 4 6 K J 8 J 10 10 K Q 2 5 7 8 10 9 3 7 9 8 7 1 10 5 6 3 Q K Q 5 Q 7 9 9 J K
    数据规模和约定
      保证每个字符串都为1 2 3 4 5 6 7 8 9 10 J Q K中的一个。

    import java.io.BufferedInputStream;
    import java.io.FileNotFoundException;
    import java.util.ArrayList;
    import java.util.Scanner;
    
    
    class Item{
    	public int hs,ns;
    }
    public class 洗牌 {
    	public static void main(String[] args) throws FileNotFoundException{
    		Scanner sc = new Scanner(new BufferedInputStream(System.in));
    		ArrayList<Integer> list = new ArrayList<Integer>();
    		while(sc.hasNextLine()){
    			String s = sc.nextLine();
    			String[] ss = s.split(" ");
    			for(int j=0;j<ss.length;j++){
    				int t;
    				if(ss[j].equals("10"))
    					t = 10;
    				else if(ss[j].equals("J"))
    					t = 11;
    				else if(ss[j].equals("Q"))
    					t = 12;
    				else if(ss[j].equals("K"))
    					t = 13;
    				else 
    					t = Integer.parseInt(ss[j]);
    				list.add(t);
    			}
    		}
    		
    		if(list.size()!=52){
    			System.out.println(-1);
    		}
    		else{
    			ArrayList<String> res = new ArrayList<String>();
    			for(int i=0;i<list.size();i++){
     				int cn = list.get(i);
    				if(res.size()<cn){
    					res.add(change(cn));
    				}
    				else{
    					ArrayList<String> t = new ArrayList<String>();
    					t.addAll(res.subList(0, cn));
    					t.add(change(cn));
    					t.addAll(res.subList(cn, res.size()));
    					res = t;
    				}
    			}
    			
    			for(int i=0;i<res.size();i++)
    				System.out.print(res.get(i)+" ");
    		}
    	}
    	
    	public static String change(int n){
    		if(n<11)
    			return ""+n;
    		else{
    			if(n==11)
    				return "J";
    			else if(n==12)
    				return "Q";
    			else 
    				return "K";
    		}
    	}
    
    }
    
    
  • 相关阅读:
    December 23rd 2016 Week 52nd Friday
    December 22nd 2016 Week 52nd Thursday
    December 21st 2016 Week 52nd Wednesday
    December 20th 2016 Week 52nd Tuesday
    December 19th 2016 Week 52nd Sunday
    December 18th 2016 Week 52nd Sunday
    uva294(唯一分解定理)
    uva11624Fire!(bfs)
    fzu2150Fire Game(双起点bfs)
    poj3276Face The Right Way
  • 原文地址:https://www.cnblogs.com/a1439775520/p/13078231.html
Copyright © 2011-2022 走看看