拉马车(Java)——蓝桥杯

 

输入输出样例

示例

输入

96J5A898QA
6278A7Q973

输出

2J9A7QA6Q6889977

运行限制

  • 最大运行时间:1s
  • 最大运行内存: 256M

主要是模拟栈跟队列的使用,题目不难,但要注意几个点:

1. 赢牌的一方并不能把桌上的牌都赢走,而是拿走相同牌点及其中间的部分。但无论如何,都是赢牌的一方继续出牌,有的时候刚一出牌又赢了,也是允许的。

2.队列如何转字符串输出------创建了一个StringBuilder对象sb。如果名为quen1的对象为空(假设quen1可能是一个集合之类的数据结构),则遍历quen2中的每个字符(假设quen2是一个包含字符的集合或可迭代对象),并将每个字符添加到StringBuilder中。最后,打印出拼接后的结果。

主要操作:队列,栈,模拟,队列转字符形式拼接输出,栈区域元素拼接到队列的队尾 

import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
import java.util.Stack;

public class Main {
    //因为想在函数中把栈元素弹出,所以栈在主函数外面创建,不然栈里面的元素变不了
    static Stack<Character> stack = new Stack<>();
    public static void main(String[] args) {
        final Scanner scan = new Scanner(System.in);
        //队列
        final Queue<Character> quen1 = new LinkedList<>();
        final Queue<Character> quen2 = new LinkedList<>();

        String s1=scan.nextLine();
        String s2=scan.nextLine();
        //字符串元素加入队列中,满足先入先出
       for(int i=0;i<s1.length();i++){
           quen1.add(s1.charAt(i));
       }
       for(int i=0;i<s2.length();i++){
           quen2.add(s2.charAt(i));
       }
       //h的作用是让赢的那边先出,1代表队列1,2代表队列2
       int h=1;
       while(!quen1.isEmpty()&&!quen2.isEmpty())
       {
             if(h==1&&pand(stack,quen1.peek())){
                 char p=quen1.remove();
                 stack.add(p);
                 jia(stack,quen1);
                 h=1;
             }
             else if(h==2&&pand(stack,quen2.peek())){
                 char p=quen2.remove();
                 stack.add(p);
                 jia(stack,quen2);
                 h=2;
             }
             else if(h==1&&!pand(stack,quen1.peek())){
                 char p=quen1.remove();
                 stack.add(p);
                 h=2;
             }else if(h==2&&!pand(stack,quen2.peek())){
                 char p=quen2.remove();
                 stack.add(p);
                 h=1;
             }

       }
       //创建了一个StringBuilder对象sb,遍历集合类(这里是队列结构)的数据结构,输出每个字符
        final StringBuilder sb = new StringBuilder();
        if(quen1.isEmpty()){
              for(Character c:quen2){
                  sb.append(c);
              }
            System.out.println(sb);

        }else {
            for(Character c:quen1){
                sb.append(c);
            }
            System.out.println(sb);

        }

    }
    //判断字符元素是否与栈顶元素相同,相同返回true
    public static Boolean pand(Stack stack,char n){
        if(stack.isEmpty()){
            return false;
        }
        for(int i=0;i<stack.size();i++){
            if(stack.get(i).equals(n)){
                return true;
            }
        }
        return false;
    }
    //把相同牌点及其中间的部分拼接到队列中
    public static Queue jia(Stack stack,Queue queue){
        //m控制区间
       int m=0;
       char s= (char) stack.peek();
        while (m!=2){
            char a= (char) stack.peek();
            if(a==s){
                m++;
            }
            queue.add(a);
            stack.pop();
        }
        return queue;
    }

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值