字节跳动 2019年笔试题-小Q游戏

问题描述:

小q制作了一个简单的游戏:有一排方块,每个方块上是一个自然数或’<‘或’>’。小Q一开始在最左边的方块上,且方向向右。
若小Q在数字方块上,他会得到方块上数字对应的分数,并且方块上的数字会减1.特别的,当小q走上数字0方块时,他会得到0分,然后摧毁这个方块,方块数量减一。
若小Q在’<‘或’>‘方块时,他会改变接下来的前进方向,’>‘代表向右,’<‘代表向左。特别地,若小Q下一个走到的方块也是’<‘或’>'时,他会摧毁这个方块。
当小q走出这排方块边界时,游戏结束,

输入格式:

第一行包括三个整数m,n,q,代表这排方块个数n,方块上数字最大不超过m,小Q玩了q次游戏,接下来一行n个用空格分隔的字符串,每个字符串要么是一个自然数,要么是'>'‘<’,代表这n个方块上的内容。
接下来q行每行两个数lr,代表每一次游戏使用[l,r]这个字串进行游戏,注意每次游戏相互独立,不会影响原方块内容。

输出格式:

输出q行,每行一个数,代表每次游戏得分

数据范围

1<=n<=10^4
1<=m<=10^6
1<=q<=10^3

完整代码:


import java.util.*;

public class Q20200215 {


    public static int getScore(String str) {
        if (str == null)
            return 0;
        int score = 0;
        int start = 0;
        int toLeft = 1;
        boolean pre = false;
        char cc[] = str.toCharArray();
        while (str.length() > 0  && start >= 0 && start < str.length()) {
            switch (str.charAt(start)) {
                case '>':
                    if (pre) {
                        str = removeCharAt(str , start);
                        pre = false;
                    }else {
                        toLeft = 1;
                        start++;
                        pre = true;
                    }
                    break;
                case '<':
                    if (pre) {
                        str = removeCharAt(str , start);
                        pre = false;
                    }else {
                        toLeft = -1;
                        start--;
                        pre = true;
                    }
                    break;
                default:
                    if (str.charAt(start) == '0') {
                        str = removeCharAt(str  , start);
                    }else {
                        score += str.charAt(start) - '0';
                        str = subCharAt(str  , start);

                        if (toLeft == 1) {
                            if (str.charAt(start) == '0') {
                                str = removeCharAt(str , start);
                            }else{
                                start += toLeft;
                            }
                        }else{
                            if (str.charAt(start) == '0') {
                                str = removeCharAt(str , start);
                            }
                            start += toLeft;
                        }
                    }
                    pre = false;
                    break;
            }
        }
        return score;
    }

    public static String removeCharAt(String s, int pos) {
        return s.substring(0, pos) + s.substring(pos + 1);// 使用substring()方法截取0-pos之间的字符串+pos之后的字符串,相当于将要把要删除的字符串删除
    }

    public static String subCharAt(String s ,int index) {
        char cc[] = s.toCharArray();
        cc[index] -= 1;
        return new String(cc);
    }

    public static void main(String[] args) {
        System.out.println(getScore(">2<5>3<"));

    }



}

附加GitHub链接

发布了10 篇原创文章 · 获赞 12 · 访问量 272

猜你喜欢

转载自blog.csdn.net/qq_36008321/article/details/104377256