省赛 蓝桥杯 2020 Java c

##蓝桥杯 2020 Java c

#A 指数计算

问题描述

7 月 1 日是建党日,从 1921 年到 2020 年,中国共产党已经带领中国人民

走过了 99 年。

请计算:7 2020 7^{2020}7

2020

mod 1921,其中 A mod B 表示 A 除以 B 的余数。

答案提交

这是一道结果填空题,你只需要算出结果后提交即可。本题的结果为一个
整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。

package Java2020;

import java.lang.annotation.Retention;
import java.math.BigInteger;

//public class 第一题 {
//  
//  
//  
//  public static void main(String[] args) {
//    
//    System.out.println(pow(7, 2020));
//    
//  }
//  static final int mod = 1921;
//  
//  static int pow(int a,int n) {
//    if(n == 0 ) return 1;
//    if (n == 1) return a;
//    if (0 == (n & 1)) return pow((a % mod)*(a % mod), n / 2) % mod;
//    return ((a % mod) * (pow((a % mod) *(a % mod), n / 2) % mod)) % mod;
//  }
//}

 
public class 第一题 {

  public static void main(String[] args) {
    System.out.println(new BigInteger("7").pow(2020).mod(new BigInteger("1921")));
  }
}

#B 解密

问题描述

小明设计了一种文章加密的方法:对于每个字母 c,将它变成某个另外的

字符Tc 下表给出了字符变换的规则:

例如,将字符串 YeRi 加密可得字符串 EaFn。
小明有一个随机的字符串,加密后为
EaFnjISplhFviDhwFbEjRjfIBBkRyY
(由 30 个大小写英文字母组成,不包含换行符),请问原字符串是多少?
(如果你把以上字符串和表格复制到文本文件中,请务必检查复制的内容
是否与文档中的一致。在试题目录下有一个文件 str.txt,第一行为上面的字符
串,后面 52 行依次为表格中的内容。)

package Java2020;

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public class 第二题 {

  public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in); //加密后的字符
    String str = scanner.next();
    Map<String, String> map = new HashMap<String, String>();
    
    for (int i = 0; i < 52; i++) {
      String s1 = scanner.next();  //加密前的字符
      String s2 = scanner.next();  //加密前的字符
      
      map.put(s2, s1);
    }
    String str2="";
    for (int i = 0; i < str.length(); i++) {
      str2+=map.get(str.charAt(i)+"");  //拿到加密前的字符
    }
    System.out.println(str2);
  }
}

#C 跑步训练

小明要做一个跑步训练。
初始时,小明充满体力,体力值计为 10000。如果小明跑步,每分钟损耗
600 的体力。如果小明休息,每分钟增加 300 的体力。体力的损耗和增加都是
均匀变化的。
小明打算跑一分钟、休息一分钟、再跑一分钟、再休息一分钟……如此循
环。如果某个时刻小明的体力到达 0,他就停止锻炼。
请问小明在多久后停止锻炼。为了使答案为整数,请以秒为单位输出答案。
答案中只填写数,不填写单位。

package Java2020c;

public class3{

	public static void main(String[] args) {
		int a = 10000;
		int time = 0;
		while (a>600) {
			a-=600;
			a+=300;
			time++;
			
		}
		System.out.println(time*2*60+a/(600/60));
	}

}

#D 合并检测

问题描述

新冠疫情由新冠病毒引起,最近在 A 国蔓延,为了尽快控制疫情,A 国准备给大量民众进病毒核酸检测。然而,用于检测的试剂盒紧缺。
为了解决这一困难,科学家想了一个办法:合并检测。即将从多个人(k个)采集的标本放到同一个试剂盒中进行检测。如果结果为阴性,则说明这 k个人都是阴性,用一个试剂盒完成了 k 个人的检测。如果结果为阳性,则说明至少有一个人为阳性,需要将这 k 个人的样本全部重新独立检测(从理论上看,如果检测前 k − 1 个人都是阴性可以推断出第 k 个人是阳性,但是在实际操作中不会利用此推断,而是将 k 个人独立检测),加上最开始的合并检测,一共使用了 k + 1 个试剂盒完成了 k 个人的检测。A 国估计被测的民众的感染率大概是 1%,呈均匀分布。请问 k 取多少能最节省试剂盒?

package Java2020;

public class 第四题 {

  public static void main(String[] args) {
    int max = 10000, min = 0x7ffffff,res = 0;
    for (int i = 2; i < max ; i++) {
      int cnt = max / i + max / 100 * i + (max % i == 0? 0:1);
      if (cnt<min) {
        min = cnt;
        res = i;
      }
    }
    System.out.println(res);
  }
  }

#E REPEAT 程序

附件 prog.txt 中是一个用某种语言写的程序。 其中 REPEAT k 表示一个次数为 k 的循环。循环控制的范围由缩进表达,从次行开始连续的缩进比该行多的(前面的空白更长的)为循环包含的内容。 例如如下片段:

REPEAT 2:

  A = A + 4
  REPEAT 5:
    REPEAT 6:
      A = A + 5
    A = A + 7
  A = A + 8
A = A + 9

该片段中从 A = A + 4 所在的行到 A = A + 8 所在的行都在第一行的循环两次中。REPEAT 6: 所在的行到 A = A + 7 所在的行都在 REPEAT 5: 循环中。A = A + 5 实际总共的循环次数是 2 × 5 × 6 = 60 次。请问该程序执行完毕之后,A 的值是多少?

package Java2020;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.security.KeyStore.Entry;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public class 第五题 {

  public static void main(String[] args) throws FileNotFoundException {
    Scanner in = new Scanner(new FileInputStream("prog.txt"));
    Map<String, Integer> map = new HashMap();
    while (in.hasNext()) {
      String now = in.next();
      Integer cnt = map.get(now);
      if (cnt == null) {
        map.put(now,1);
      }else {
        map.put(now, cnt+1);
      }
      for (java.util.Map.Entry<String, Integer> e: map.entrySet()) {
        System.out.println(e.getKey()+": " + e.getValue());
      }
    }
  }
}

试题 F: 分类计数

【问题描述】

输入一个字符串,请输出这个字符串包含多少个大写字母,多少个小写字母,多少个数字。

【输入格式】

输入一行包含一个字符串。

【输出格式】

输出三行,每行一个整数,分别表示大写字母、小写字母和数字的个数。

【样例输入】

1+a=Aab

【样例输出】

1

3

1

package Java2020;

import java.util.Scanner;

public class 第六题 {

  public static void main(String[] args) {
    int number = 0;
    int capital = 0;
    int Lowletters = 0;
    Scanner sc = new Scanner(System.in);
    String str = sc.nextLine();
    for (int i = 0; i < str.length(); i++) {
      char a = str.charAt(i);
      if (a >= '0' && a <= '9') {
        number++;
      }else if (a >= 'a' && a <= 'z') {
        capital++;
      }else if (a >= 'A' && a <= 'Z'){
        Lowletters++;
      }
    }
    System.out.println(number);
    System.out.println(capital);
    System.out.println(Lowletters);
  }
}

试题 G: 整除序列

【问题描述】

本题总分:15 分

有一个序列,序列的第一个数是 n,后面的每个数是前一个数整除 2,请输出这个序列中值为正数的项。

【输入格式】

输入一行包含一个整数 n。

【输出格式】

输出一行,包含多个整数,相邻的整数之间用一个空格分隔,表示答案。

【样例输入】

20

【样例输出】

20 10 5 2 1

【评测用例规模与约定】

对于 80% 的评测用例,1 ≤ n ≤ 109。

对于所有评测用例,1 ≤ n ≤ 1018。

package Java2020;

import java.util.Scanner;

public class 第七题 {

  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    long a = sc.nextLong();
    
    while (a != 0) {
      a=a/2;
      if (a == 0) {
        break;
      }
      System.out.print(a+" ");
    }
  }
}

试题 H: 走方格

本题总分:20 分

【问题描述】

在平面上有一些二维的点阵。这些点的编号就像二维数组的编号一样,从上到下依次为第 1 至第 n 行,从左到右依次为第 1 至第 m 列,每一个点可以用行号和列号来表示。现在有个人站在第 1 行第 1 列,要走到第 n 行第 m 列。只能向右或者向下走。注意,如果行号和列数都是偶数,不能走入这一格中。问有多少种方案。

【输入格式】

输入一行包含两个整数 n, m。

【输出格式】

输出一个整数,表示答案。

【样例输入】

3 4

【样例输出】

2

【样例输入】

6 6

【样例输出】

0

【评测用例规模与约定】

对于所有评测用例,1 ≤ n ≤ 30, 1 ≤ m ≤ 30。

package Java2020;

import java.util.Scanner;

public class 第八题 {
  
  private static int m;
  private static int n;
  private static int sum;
  
  public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    n = scanner.nextInt();
    m = scanner.nextInt();
    sum = 0;
    dfs(1,1);
    
    System.out.println(sum);
  }
  
  private static void dfs(int i, int j) {
    if (i>n||j>m) {
      return;
    }
    if (i%2 == 0 && j%2 == 0) {
      return;
    }

    if (i==n&&j==m) {
      sum++;
      return;
    }
    dfs(i+1,j);
    dfs(i,j+1);
  }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值