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

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

F、打印大X

如下的程序目的是在控制台打印输出大X。

可以控制两个参数:图形的高度,以及笔宽。


用程序中的测试数据输出效果:

(如果显示有问题,可以参看p1.png)


高度=15, 笔宽=3


image.png


高度=8, 笔宽=5


 image.png


请仔细分析程序流程,填写缺失的代码。

public class A
{
static void f(int h, int w){
System.out.println(String.format(“高度=%d, 笔宽=%d”,h,w));
int a1 = 0;
int a2 = h - 1;
for(int k=0; k<h; k++){
int p = Math.min(a1,a2);
int q = Math.max(a1+w,a2+w);
for(int i=0; i<p; i++) System.out.print(" ");
if(q-p<w2){
____________________________________________ ; //填空
}
else{
for(int i=0; i<w; i++) System.out.print("");
for(int i=0; i<q-p-w2; i++) System.out.print(" “);
for(int i=0; i<w; i++) System.out.print(”");
}
System.out.println();
a1++;
a2–;
}
}
public static void main(String[] args){
f(15,3);
f(8,5);
}
}

注意:只填写缺失的代码,不要拷贝已经存在的代码。


题解:


package action;
public class demo {
  static void f(int h, int w) {
  System.out.println(String.format("高度=%d, 笔宽=%d", h, w)); // 打印高度和宽度
  int a1 = 0; // 每一行第一个*的位置(上半部分)
  int a2 = h - 1; // 图形的行数(上半部分)
  for (int k = 0; k < h; k++) {
    // 上下两部分是对称的,所以这里用最大值和最小值的方式可以起到对称的效果
    int p = Math.min(a1, a2); // 每一行第一个*的位置
    int q = Math.max(a1 + w, a2 + w); // 每一行的长度
    // 左侧空格部分
    for (int i = 0; i < p; i++) // 从0->p,即第一个*前都是空格
    System.out.print(" ");
    // 这一部分填空的位置,再没有这个代码打印的话,会发现就是中间那几行*号的部分
    // 范围就是它在if中的条件q-p
    if (q - p < w * 2) { 
     for(int i=0; i<q-p; i++) System.out.print("*"); ; //填空
    } else {
    // 左侧*号部分
    for (int i = 0; i < w; i++)
      System.out.print("*");
    // 上面和下面的空格部分
    for (int i = 0; i < q - p - w * 2; i++)
      System.out.print(" ");
    // 右侧的*号部分
    for (int i = 0; i < w; i++)
      System.out.print("*");
    }
    System.out.println(); // 换行
    a1++;
    a2--;
  }
  }
  public static void main(String[] args) {
  f(15, 3);
  f(8, 5);
  }
}

image.png

image.png



G、缩位求和

在电子计算机普及以前,人们经常用一个粗略的方法来验算四则运算是否正确。

比如:248 * 15 = 3720

把乘数和被乘数分别逐位求和,如果是多位数再逐位求和,直到是1位数,得

2 + 4 + 8 = 14 ==> 1 + 4 = 5;

1 + 5 = 6

5 * 6

而结果逐位求和为 3

5 * 6 的结果逐位求和与3符合,说明正确的可能性很大!!(不能排除错误)


请你写一个计算机程序,对给定的字符串逐位求和:

输入为一个由数字组成的串,表示n位数(n<1000);

输出为一位数,表示反复逐位求和的结果。


例如:

输入:

35379


程序应该输出:

9


再例如:

输入:

7583676109608471656473500295825


程序应该输出:

1

资源约定:

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

CPU消耗  < 1000ms


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


所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。

不要使用package语句。不要使用jdk1.7及以上版本的特性。

主类的名字必须是:Main,否则按无效代码处理。


题解:


package action;
import java.util.Scanner;
public class demo {
  public static void main(String[] args) {
  Scanner sc = new Scanner(System.in);
  String str = sc.next(); // 输入字符串
  char[] ch = str.toCharArray(); // 字符串转换为字符数组
  while (true) {
    int num = 0; // 和
    for (int i = 0; i < ch.length; i++) {
    num += (ch[i] - '0'); // 每个字符加和
    }
    str = num + ""; // 将和变成字符串
    if (str.length() == 1) { // 判断字符串长度
    System.out.println(str);
    break;
    }
    ch = str.toCharArray(); // 如果没有跳出,则继续将字符串切割成字符数组,继续循环
  }
  }
}


image.png


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

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