2020年第十一届蓝桥杯javaB组省赛

试题 A: 门牌制作
本题总分:5 分

【问题描述】
小蓝要为一条街的住户制作门牌号。
这条街一共有 2020 位住户,门牌号从 1 到 2020 编号。
小蓝制作门牌的方法是先制作 0 到 9 这几个数字字符,最后根据需要将字
符粘贴到门牌上,例如门牌 1017 需要依次粘贴字符 1、 0、 1、 7,即需要 1 个
字符 0, 2 个字符 1, 1 个字符 7。
请问要制作所有的 1 到 2020 号门牌,总共需要多少个字符 2?

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

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int ans = 0;
		for(int i=1;i<=2020;i++) {
			int t=i;
			while(t !=0) {
				if(t%10==2) {
					ans++;
				}
				t/=10;
			}
			
		}
		System.out.println(ans);
	}

方法二:

public static void main(String[] args) {
		int sum = 0;
		for(Integer i=1;i<=2020;i++) {
			String str = new String(i.toString());
			for(int j=0;j<str.length();j++) {
				if(str.charAt(j)=='2') {
					sum++;
				}
			}
		}
		System.out.println(sum);
	}

试题 B: 寻找 2020
本题总分:5 分

【问题描述】
小蓝有一个数字矩阵,里面只包含数字 0 和 2。小蓝很喜欢 2020,他想找
到这个数字矩阵中有多少个 2020 。
小蓝只关注三种构成 2020 的方式:
• 同一行里面连续四个字符从左到右构成 2020。
• 同一列里面连续四个字符从上到下构成 2020。
• 在一条从左上到右下的斜线上连续四个字符,从左上到右下构成 2020。
例如,对于下面的矩阵:
220000
000000
002202
000000
000022
002020
一共有 5 个 2020。其中 1 个是在同一行里的, 1 个是在同一列里的, 3 个
是斜线上的。
小蓝的矩阵比上面的矩阵要大,由于太大了,他只好将这个矩阵放在了一
个文件里面,在试题目录下有一个文件 2020.txt,里面给出了小蓝的矩阵。
请帮助小蓝确定在他的矩阵中有多少个 2020。

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

个人答案:16520
先找出有多少行

public static void main(String[] args) {
		Scanner read = new Scanner(System.in);
		String s = "";
		for(int i=1;;i++)
		{
			s = read.nextLine();
			if(s!=null)
				System.out.println(i);
		}		
	}

然后正式代码如下:

public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		int cnt = 0;
		String []str = new String[300];
		for(int i=0;i<300;i++) {
			str[i]=sc.nextLine();
		}
		for(int i=0;i<str.length;i++) {
			for(int j=0;j<str[i].length();j++) {
				if(str[i].charAt(j)=='2') {
					//横向
					if(j+4<=str[i].length()&&str[i].charAt(j+1)=='0'&&str[i].charAt(j+2)=='2'&&str[i].charAt(j+3)=='0') {
					cnt++;	
					}
					//纵向
					if(i+4<=str.length&&str[i+1].charAt(j)=='0'&&str[i+2].charAt(j)=='2'&&str[i+3].charAt(j)=='0') {
						cnt++;
					}
					//右下方
					if(i+4<=str.length&&j+4<=str[i].length()&&str[i+1].charAt(j+1)=='0'&&str[i+2].charAt(j+2)=='2'&&str[i+3].charAt(j+3)=='0') {
						cnt++;
					}
				}
			}
		
		}
		System.out.println(cnt);
	}

试题 F: 成绩分析
时间限制: 1.0s 内存限制: 512.0MB 本题总分:15 分

【问题描述】
小蓝给学生们组织了一场考试,卷面总分为 100 分,每个学生的得分都是 一个 0 到 100 的整数。

请计算这次考试的最高分、最低分和平均分。

【输入格式】
输入的第一行包含一个整数 n,表示考试人数。 接下来 n 行,每行包含一个 0 至 100 的整数,表示一个学生的得分。

【输出格式】
输出三行。
第一行包含一个整数,表示最高分。
第二行包含一个整数,表示最低分。
第三行包含一个实数,四舍五入保留正好两位小数,表示平均分。

【样例输入】
7
80
92
56
74
88
99
10

【样例输出】
99
10
71.29

【评测用例规模与约定】
对于 50% 的评测用例,1≤n≤100。
对于所有评测用例,1≤n≤10000。

public static void main(String[] args){
        Scanner s = new Scanner(System.in);
        int n = s.nextInt();	//输入n
        int num[] = new int [n];	
        double sum = 0;		//令和为0
        for(int i = 0;i < n;i++){	//输入数字并求和
            num[i] = s.nextInt(); 
            sum += num[i];
        }
        Arrays.sort(num);	//排序,默认升序
        System.out.println(num[n-1]);	//输出最大数
        System.out.println(num[0]);		//输出最小数
        double average = sum/n;	//平均值为x
        System.out.println(String.format("%.2f", average));//按保留小数点后两位的格式输出平均数
    }

试题 G: 单词分析
时间限制: 1.0s 内存限制: 512.0MB 本题总分:20 分

【问题描述】
小蓝正在学习一门神奇的语言,这门语言中的单词都是由小写英文字母组 成,有些单词很长,远远超过正常英文单词的长度。小蓝学了很长时间也记不 住一些单词,他准备不再完全记忆这些单词,而是根据单词中哪个字母出现得 最多来分辨单词。

现在,请你帮助小蓝,给了一个单词后,帮助他找到出现最多的字母和这 个字母出现的次数。

【输入格式】
输入一行包含一个单词,单词只由小写英文字母组成。

【输出格式】
输出两行,第一行包含一个英文字母,表示单词中出现得最多的字母是哪 个。如果有多个字母出现的次数相等,输出字典序最小的那个。

第二行包含一个整数,表示出现得最多的那个字母在单词中出现的次数。

【样例输入】
lanqiao

【样例输出】
a
2

【样例输入】
longlonglongistoolong

【样例输出】
o
6

【评测用例规模与约定】
对于所有的评测用例,输入的单词长度不超过 1000。


	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		String str = sc.nextLine();
		HashMap<Character,Integer> map = new HashMap<Character,Integer>();
		for(int i=0;i<str.length();i++) {
			if(!map.containsKey(str.charAt(i))) {
				map.put(str.charAt(i), 1);
			}else {
				int a = map.get(str.charAt(i));
				a++;
				map.put(str.charAt(i), a);
			}
		}
		int max = 0;
		char max_c = ' ';
		for(Character ch:map.keySet()) {
			if(map.get(ch)>max) {
				max = map.get(ch);
				max_c = ch;
			}
		}
		System.out.println(max);
		System.out.println(max_c);
	}

试题 I: 子串分值和
时间限制: 3.0s 内存限制: 512.0MB 本题总分:25 分

【问题描述】
对于一个字符串 S,我们定义 S 的分值 f(S) 为 S 中出现的不同的字符个 数。例如 f(”aba”) = 2,f(”abc”) = 3, f(”aaa”) = 1。 现在给定一个字符串 S[0…n−1](长度为 n),请你计算对于所有 S 的非空 子串 S[i…j](0≤i≤ j < n),f(S[i…j]) 的和是多少。

【输入格式】
输入一行包含一个由小写字母组成的字符串 S。

【输出格式】
输出一个整数表示答案。

【样例输入】
ababc

【样例输出】
28

【样例说明】
子串 f值
a 1
ab 2
aba 2
abab 2
ababc 3
b 1
ba 2
bab 2
babc 3
a 1
ab 2
abc 3
b 1
bc 2
c 1

【评测用例规模与约定】
对于 20% 的评测用例,1≤n≤10;
对于 40% 的评测用例,1≤n≤100;
对于 50% 的评测用例,1≤n≤1000;
对于 60% 的评测用例,1≤n≤10000;
对于所有评测用例,1≤n≤100000。

个人代码:

public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		String a[]= new String[40000000];
		String str = sc.nextLine();
		int k=0;
		int count = 0;
		for(int i=0;i<str.length();i++) {
			for(int j=i+1;j<=str.length();j++) {
				a[k]=(str.substring(i,j));
				k++;
			}
		}
		for(int i=0;i<k;i++) {
			Set<String> set = new HashSet<String>();
			for(int j=0;j<a[i].length();j++) {
				set.add(a[i].charAt(j)+"");
			}
			count = count+set.size();
		}
		System.out.println(count);
	}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值