[蓝蓝计算机考研算法训练二期]-day03

194 阅读3分钟

4、一个小球从10m处落下,每次的弹回之前的高度一半,请问小球在静止之前一共走过多少距离。

思路

初始为10m,每次回弹高度为下落时高度的一半,回弹后下落和这次回弹小球所走的距离一样,即2倍回弹的高度,也就是上次下落的高度,所以每次sum加上下落时的高度然后高度再除以2即可,sum初始值为10,循环直到回弹高度为0.

具体实现

Java实现

 public static void main(String[] args) {
        float high = 10, sum = 10;
        while (high != 0) {
            sum += high;
            high /= 2;
        }
        System.out.println(sum);
    }
}

结果: 30.0m

5、我要通过!

“答案正确”是自动判题系统给出的最令人欢喜的回复。本题属于PAT的“答案正确”大派送——只要读入的字符串满足下列条件,系统就输出“答案正确”,否则输出“答案错误”。得到“答案正确”的条件是:

  1. 字符串中必须仅有 P、A、T 这三种字符,不可以包含其它字符;
  2. 任意形如xPATx的字符串都可以获得“答案正确”,其中x或者是空字符串,或者是仅由字母A组成的字符串;
  3. 如果aPbTc是正确的,那么aPbATca也是正确的,其中a、b、c均或者是空字符串,或者是仅由字母 A 组成的字符串。 现在就请你为 PAT 写一个自动裁判程序,判定哪些字符串是可以获得“答案正确”的。

输入格式:

每个测试输入包含1个测试用例。第1行给出一个正整数n(<=10),是需要检测的字符串个数。接下来每个字符串占一行,字符串长度不超过100,且不包含空格。

输出格式:

每个字符串的检测结果占一行,如果该字符串可以获得“答案正确”,则输出YES,否则输出NO。

输入样例:

PAT
PAAT
AAPATAA
AAPAATAAAA
xPATx
PT
Whatever
ΑΡAAAΤAA
APT
ΑΡATΤAA

输出样例:

YES
YES
YES
YES
NO
NO
NO
NO
NO
NO

思路:

由第一个条件可知,首先字符串只能含P、A、T三种字符。由条件2可知,中间为PAT,两边是相同的字符串且只能由空字符或A组成也是属于答案正确。再结合条件3可知,如果aPbTc是正确的,那么aPbATca也是正确的,形式最简单的就是xPATx,剩余的都是由xPATx发展而来的,可以看出P和T之间每增加一个A,T后面就加加一个x,所以中间字符串的长度决定了后面有几个x,所以将字符串根据P和T分割成3段字符串,第三段的长度=第一段的长度 * 第二段的长度。综上所述,答案正确的字符串首先满足的条件是P之前和T之后都有0或多个A,P和T之间至少一个A,这可以用正则表达式进行匹配,其次,字符串在P和T处分割后的3个字符串需满足第三段的长度=第一段的长度 * 第二段的长度。

具体实现

Java实现

public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);
    int n = scan.nextInt();
    String[] s = new String[n];
    for (int i = 0; i < n; i++) {
        s[i] = scan.next();

    }
    for (int i = 0; i < n; i++) {
        if (s[i].matches("A*PA+TA*")) {
            String[] str = new String[3];
            str = s[i].split("[PT]", 3);
            if (str[2].length() == str[0].length() * str[1].length()) {
                System.out.println("YES");
            } else {
                System.out.println("NO");
            }
        } else {
            System.out.println("NO");
        }
    }
}

结果

image.png