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

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

E、书号验证

2004年起,国际ISBN中心出版了《13位国际标准书号指南》。

原有10位书号前加978作为商品分类标识;校验规则也改变。

校验位的加权算法与10位ISBN的算法不同,具体算法是:

用1分别乘ISBN的前12位中的奇数位(从左边开始数起),用3乘以偶数位,

乘积之和以10为模,10与模值的差值再    对10取模(即取个位的数字)即可得到校验位的值,

其值范围应该为0~9。


下面的程序实现了该算法,请仔细阅读源码,填写缺失的部分。

public class A

{

static boolean f(String s){

int k=1;

int sum = 0;

for(int i=0; i<s.length(); i++){

char c = s.charAt(i);

if(c==’-’ || c==’ ') continue;

sum += ______________________________; //填空

k++;

if(k>12) break;

}

return s.charAt(s.length()-1)-‘0’ == (10-sum % 10)%10;

}

public static void main(String[] args){

System.out.println(f(“978-7-301-04815-3”));

System.out.println(f(“978-7-115-38821-6”));

}

}


题解:

package action;
public class demo {
  static boolean f(String s) {
    int k = 1; // 位数
    int sum = 0; // 乘积之和
    for (int i = 0; i < s.length(); i++) {
      char c = s.charAt(i); // 获取每个字符
      if (c == '-' || c == ' ')
        continue; // 跳转杠和空格
      // (k % 2 == 0?3:1) : 判断是否是奇数还是偶数,并且得到对应的乘值
      sum += (c - '0') * (k % 2 == 0 ? 3 : 1); // 填空位置
      k++; // 每次循环位数+1
      if (k > 12)
        break; // 超出12位直接跳出
    }
    // 乘积之和以10为模,10与模值的差值再对10取模(即取个位的数字)即可
    return s.charAt(s.length() - 1) - '0' == (10 - sum % 10) % 10;
  }
  public static void main(String[] args) {
    System.out.println(f("978-7-301-04815-3"));
    System.out.println(f("978-7-115-38821-6"));
  }
}

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

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