栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

第十一届蓝桥杯B组Java试题答案

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

第十一届蓝桥杯B组Java试题答案

试题 A: 解密

小明设计了一种文章加密的方法:对于每个字母 c,将它变成某个另外的字符 T c 。下表给出了字符变换的规则:

例如,将字符串 YeRi 加密可得字符串 EaFn。小明有一个随机的字符串,加密后为EaFnjISplhFviDhwFbEjRjfIBBkRyY(由 30 个大小写英文字母组成,不包含换行符),请问原字符串是多少?

答案:YeRikGSunlRzgDlvRwYkXkrGWWhXaA

试题 B: 纪念日

2020 年 7 月 1 日是CPC成立 99 周年纪念日。CPC成立于 1921 年 7 月 23 日。
请问从 1921 年 7 月 23 日中午 12 时到 2020 年 7 月 1 日中午 12 时一共包含多少分钟? 

答案:52038720
闰年:24个  平年:75个
(25*366+74*365)*24*60 - 22*24*60 = 52038720

试题 C: 合并检测

答案:10
分析:假设A国有n个人,感染者有n/100,每k个人一组,共n/k组,共用n/k瓶试剂
按照最坏的情况,每多出一个感染者就多用k瓶试剂,因此共用n/k+(n/100)*k瓶试剂
n=10时,n*(1/k+k/100)最小

试题 D: 分配口罩

某市市长获得了若干批口罩,每一批口罩的数目如下:(如果你把以下文字复制到文本文件中,请务必检查复制的内容是否与文档中的一致。在试题目录下有一个文件 mask.txt,内容与下面的文本相同)
9090400
8499400
5926800
8547000
4958200
4422600
5751200
4175600
6309600
5865200
6604400
4635000
10663400
8087200
4554000
现在市长要把口罩分配给市内的 2 所医院。由于物流限制,每一批口罩只能全部分配给其中一家医院。市长希望 2 所医院获得的口罩总数之差越小越好。请你计算这个差最小是多少?

答案:2400

设这些数的和为sum,分为两组后,一组数的和必定<=sum/2,另一组数的和必定>=sum/2。
我们只需要求出这样一组数,它们的和<=sum/2,并且这个和要尽可能最大。
用dp[j]表示一组数的和,这个和<=j,并且在所有情况下最大,这里我们要求dp[sum/2]。

public class Main {
	public static void main(String[] args) {
		int[] nums = {9090400,8499400,5926800,8547000,4958200,4422600,5751200,4175600
			,6309600,5865200,6604400,4635000,10663400,8087200,4554000};
		int sum = 0;
		for(int i = 0; i < nums.length; ++i) {
			sum+=nums[i];
		}
		int half_sum = sum/2;
		int[] dp = new int[99990000];
		for(int i = 0; i < nums.length; ++i) {
			for(int j = half_sum; j >= nums[i]; --j) {
				dp[j] = Math.max(dp[j], dp[j-nums[i]]+nums[i]);
			}
		}
		System.out.print(sum-2*dp[half_sum]);
	}
}
试题 E: 斐波那契数列最大公约数

斐波那契数列满足 F1 = F2 = 1,从 F3 开始有 Fn = Fn−1+Fn−2 。请你计算GCD(F2020 ,F520),其中GCD(A, B) 表示 A 和 B 的最大公约数。

答案:6765

import java.math.BigInteger;

public class Main {
	public static BigInteger gcd(BigInteger a,BigInteger b) {
		return b.equals(BigInteger.ZERO) ? a : gcd(b, a.mod(b));
	}
	public static void main(String[] args) {
		BigInteger arr[] = new BigInteger[2021];
		arr[1] = arr[2] = BigInteger.ONE;
		for(int i = 3; i <=2020; ++i) {
			arr[i] = arr[i-1].add(arr[i-2]);
		}
		System.out.print(arr[2020].gcd(arr[520]));
	}
}
试题 F: 分类计数

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

【输入格式】
输入一行包含一个字符串。
【输出格式】
输出三行,每行一个整数,分别表示大写字母、小写字母和数字的个数。
【样例输入】
1+a=Aab
【样例输出】
  1
  3
  1 

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner s = new Scanner(System.in);
		String str = s.next();
		char[] arr = str.toCharArray();
		int upper = 0, lower = 0, digit = 0;
		for(int i = 0; i < arr.length; ++i) {
			if(arr[i] >= 'A' && arr[i] <= 'Z') {
				upper++;
			} else if(arr[i] >= 'a' && arr[i] <= 'z'){
				lower++;
			} else if(arr[i] >= '0' && arr[i] <= '9') {
				digit++;
			}
		}
		System.out.print(upper+"n"+lower+"n"+digit);
		s.close();
	}
}
试题 G: 八次求和

【问题描述】
给定正整数 n, 求 1^8 + 2^8 + ··· + n^8 mod 123456789 。其中 mod 表示取余。
【输入格式】
输入的第一行包含一个整数 n。
【输出格式】
输出一行,包含一个整数,表示答案。
【样例输入】
  2
【样例输出】
  257
【评测用例规模与约定】
  对于 20% 的评测用例,1 ≤ n ≤ 20。
  对于 60% 的评测用例,1 ≤ n ≤ 1000。
  对于所有评测用例,1 ≤ n ≤ 1000000。

快速幂运算(算乘法的时间复杂度为logn)+模运算

import java.util.Scanner;

public class Main {
	static int mod = 123456789;
	
	public static void main(String[] args) {
		Scanner s = new Scanner(System.in);
		int n = s.nextInt();
		long ans = 0;
		for(long i = 1; i <= n; ++i) {
			ans = (ans+quickPow(i,8))%mod;  //long型的i防止计算时溢出
		}
		System.out.print(ans);
		s.close();
	}
	
	static long quickPow(long a, int b) {
		long ans = 1;
		while(b>0) {
			if((b&1) == 1) {
				ans = (ans*a)%mod;
			}
			a = (a*a)%mod;  //记录位权
			b >>= 1;
		}
		return ans;
	}
}

BigInteger类

import java.math.BigInteger;
import java.util.Scanner;

public class Main {
	public static final BigInteger mod = BigInteger.valueOf(123456789);
	public static void main(String[] args) {
		Scanner s = new Scanner(System.in);
		int n = s.nextInt();
		BigInteger sum = BigInteger.ZERO;
		for(int i = 1; i <= n; ++i) {
			BigInteger temp = BigInteger.valueOf(i);
			sum = sum.add(temp.multiply(temp).multiply(temp).multiply(temp)
					.multiply(temp).multiply(temp).multiply(temp).multiply(temp));
		}
		System.out.print(sum.mod(mod));
		s.close();
	}
}
试题 H: 字符串编码

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/727288.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号