第九届蓝桥杯省赛JavaC组真题——详细答案对照(完整版)-3

简介: 第九届蓝桥杯省赛JavaC组真题——详细答案对照(完整版)

H、等腰三角形

本题目要求你在控制台输出一个由数字组成的等腰三角形。

具体的步骤是:

1. 先用1,2,3,...的自然数拼一个足够长的串

2. 用这个串填充三角形的三条边。从上方顶点开始,逆时针填充。

比如,当三角形高度是8时:


        1

     2 1

    3   8

   4     1

  5       7

 6         1

7           6

891011121314151


输入,一个正整数n(3<n<300),表示三角形的高度

输出,用数字填充的等腰三角形。


为了便于测评,我们要求空格一律用"."代替。


例如:

输入:

5


程序应该输出:

....1

...2.1

..3...2

.4.....1

567891011


再例如:

输入:

10


程序应该输出:

.........1

........2.2

.......3...2

......4.....2

.....5.......1

....6.........2

...7...........0

..8.............2

.9...............9

1011121314151617181


再例如:

输入:

15


程序应该输出:


..............1

.............2.3

............3...2

...........4.....3

..........5.......1

.........6.........3

........7...........0

.......8.............3

......9...............9

.....1.................2

....0...................8

...1.....................2

..1.......................7

.1.........................2

21314151617181920212223242526


资源约定:

峰值内存消耗(含虚拟机) < 256M

CPU消耗  < 1000ms


题解:

package action;
import java.util.Scanner;
public class demo {
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    int h = sc.nextInt(); // 高度
    int an = 1 + (h - 1 - 1) * 2; // 最下面一行需要的字符数
    int n = h + an + (h - 1); // 一圈所需要的字符数
    char[] ch = new char[n + 3]; // 长度加3个备用
    String numStr = ""; // 获取所需字符
    for (int i = 1; numStr.length() < n + 3; i++) {
      numStr += String.valueOf(i);
    }
    ch = numStr.toCharArray(); // 变成字符
    // 打印
    for (int i = 1; i <= h; i++) {
      // 左侧.号
      for (int j = h - i; j > 0; j--) {
        System.out.print(".");
      }
      System.out.print(ch[i - 1]); // 左侧数字
      // 中间.号,这个运用等差数列可以获得中间的空值,然后去打印
      if (i >= 2 && i < h) {
        for (int a = 0; a < 1 + (i - 1 - 1) * 2; a++) {
          System.out.print(".");
        }
      }
      // 最后一行
      if (i == h) {
        for (int j = 0; j < an; j++) {
          System.out.print(ch[h + j]);
        }
      }
      if (i != 1) {
        System.out.print(ch[n - i + 1]); // 右侧数字
      }
      System.out.println();
    }
  }
}

image.png


I、小朋友崇拜圈

班里N个小朋友,每个人都有自己最崇拜的一个小朋友(也可以是自己)。

在一个游戏中,需要小朋友坐一个圈,

每个小朋友都有自己最崇拜的小朋友在他的右手边。

求满足条件的圈最大多少人?

小朋友编号为1,2,3,…N

输入第一行,一个整数N(3<N<100000)

接下来一行N个整数,由空格分开。

要求输出一个整数,表示满足条件的最大圈的人数。

例如:

输入:

9

3 4 2 5 3 8 4 6 9

则程序应该输出:

4

解释:

如图p1.png所示,崇拜关系用箭头表示,红色表示不在圈中。

显然,最大圈是[2 4 5 3] 构成的圈

再例如:

输入:

30

22 28 16 6 27 21 30 1 29 10 9 14 24 11 7 2 8 5 26 4 12 3 25 18 20 19 23 17 13 15

程序应该输出:

16

资源约定:

峰值内存消耗(含虚拟机) < 256M

CPU消耗 < 1000ms


题解:

package action;
import java.util.ArrayList;
import java.util.Scanner;
public class demo {
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    int n = sc.nextInt();
    int[] arr = new int[n];
    for (int i = 0; i < arr.length; i++) {
      arr[i] = sc.nextInt();
    }
    // 循环数组,每个num代表的是这个小朋友崇拜的人
    int max = 0; // 最大的圈中人数
    for (int num : arr) {
      ArrayList<Integer> list = new ArrayList<Integer>(); // 储存圈中人数
      int count = 0; // 以每一个为起点得到的圈中个数
      int temp = num; // 临时变量
      // 判断这个小朋友崇拜的人是否在list集合中,存在则圈停止结束,不存在则继续
      while (!list.contains(temp)) {
        list.add(temp); // 添加小朋友崇拜的人到集合中
        temp = arr[temp - 1]; // 找到当前小朋友崇拜的人,继续循环
        count++; // 圈中人数+1
        if (count > max) { // 比较替换最大的圈中人数
          max = count;
        }
      }
    }
    System.out.println(max);
  }
}

image.png

image.png


两个数据都通过。

J、耐摔指数


x星球的居民脾气不太好,但好在他们生气的时候唯一的异常举动是:摔手机。

各大厂商也就纷纷推出各种耐摔型手机。x星球的质监局规定了手机必须经过耐摔测试,并且评定出一个耐摔指数    来,之后才允许上市流通。

x星球有很多高耸入云的高塔,刚好可以用来做耐摔测试。塔的每一层高度都是一样的,与地球上稍有不同的是,他们的第一层不是地面,而是相当于我们的2楼。

如果手机从第7层扔下去没摔坏,但第8层摔坏了,则手机耐摔指数=7。

特别地,如果手机从第1层扔下去就坏了,则耐摔指数=0。

如果到了塔的最高层第n层扔没摔坏,则耐摔指数=n

为了减少测试次数,从每个厂家抽样3部手机参加测试。

如果已知了测试塔的高度,并且采用最佳策略,在最坏的运气下最多需要测试多少次才能确定手机的耐摔指数呢?

输入数据,一个整数n(3<n<10000),表示测试塔的高度。

输出一个整数,表示最多测试多少次。

例如:

输入:

3

程序应该输出:

2

解释:

手机a从2楼扔下去,坏了,就把b手机从1楼扔;否则a手机继续3层扔下

再例如:

输入:

7

程序应该输出:

3

解释:

a手机从4层扔,坏了,则下面有3层,b,c 两部手机2次足可以测出指数;

若是没坏,手机充足,上面5,6,7 三层2次也容易测出。

资源约定:

峰值内存消耗(含虚拟机) < 256M

CPU消耗 < 1000ms

请严格按要求输出,不要画蛇添足地打印类似:“请您输入…” 的多余内容。


题解:

package action;
import java.util.Scanner;
public class demo {
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    int n = sc.nextInt();
    int[] x = new int[1000];
    int sum = 1;
    for (int i = 0; sum < n; i++) {
      sum = i + sum;
      x[i] = sum;
    }
    sum = 1;
    int k = 0;
    for (int i = 0; sum < n; i++) {
      sum = x[i] + sum;
      k++;
    }
    System.out.println(k);
  }
}

两个测试数据都过了。

image.png

image.png

相关文章
|
5月前
|
机器学习/深度学习 人工智能 测试技术
第十三届蓝桥杯省赛JavaC组真题——详细答案对照(完整版)
第十三届蓝桥杯省赛JavaC组真题——详细答案对照(完整版)
353 0
|
算法
第九届蓝桥杯省赛JavaC组真题——详细答案对照(完整版)-1
第九届蓝桥杯省赛JavaC组真题——详细答案对照(完整版)
1911 0
第九届蓝桥杯省赛JavaC组真题——详细答案对照(完整版)-1
第九届蓝桥杯省赛JavaC组真题——详细答案对照(完整版)-3
第九届蓝桥杯省赛JavaC组真题——详细答案对照(完整版)
197 0
第九届蓝桥杯省赛JavaC组真题——详细答案对照(完整版)-3
第九届蓝桥杯省赛JavaC组真题——详细答案对照(完整版)-2
第九届蓝桥杯省赛JavaC组真题——详细答案对照(完整版)
88 0
第九届蓝桥杯省赛JavaC组真题——详细答案对照(完整版)-2
第八届蓝桥杯省赛JavaC组真题——详细答案对照(完整版)-3
第八届蓝桥杯省赛JavaC组真题——详细答案对照(完整版)
141 0
第八届蓝桥杯省赛JavaC组真题——详细答案对照(完整版)-3
|
人工智能 测试技术
第十一届蓝桥杯省赛JavaC组真题——详细答案对照(完整版)-3
第十一届蓝桥杯省赛JavaC组真题——详细答案对照(完整版)
165 0
第十一届蓝桥杯省赛JavaC组真题——详细答案对照(完整版)-3
|
数据安全/隐私保护
第十一届蓝桥杯省赛JavaC组真题——详细答案对照(完整版)-1
第十一届蓝桥杯省赛JavaC组真题——详细答案对照(完整版)
89 0
第十一届蓝桥杯省赛JavaC组真题——详细答案对照(完整版)-1
|
测试技术
第十一届蓝桥杯省赛JavaC组真题——详细答案对照(完整版)-2
第十一届蓝桥杯省赛JavaC组真题——详细答案对照(完整版)
98 0
第十一届蓝桥杯省赛JavaC组真题——详细答案对照(完整版)-2
第八届蓝桥杯决赛JavaC组真题——详细答案对照(完整版)-2
第八届蓝桥杯决赛JavaC组真题——详细答案对照(完整版)
152 0
第八届蓝桥杯决赛JavaC组真题——详细答案对照(完整版)-2
第八届蓝桥杯决赛JavaC组真题——详细答案对照(完整版)-1
第八届蓝桥杯决赛JavaC组真题——详细答案对照(完整版)
234 0
第八届蓝桥杯决赛JavaC组真题——详细答案对照(完整版)-1