第十一届蓝桥杯校内模拟赛JAVA题解

欢迎各位大佬指出错误,共同学习!

 

1.问题描述


请问十六进制数1949对应的十进制数是多少?请特别注意给定的是十六进制,求的是十进制。
答案提交
  这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

6473


2.问题描述


两个二进制数11110011101和1111101001的和是多少?请用二进制表示,注意在提交的时候不要提交前导0。
答案提交
  这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个二进制数,在提交答案时只填写这个二进制数,填写多余的内容将无法得分。

101110000110


3.问题描述


将LANQIAO中的字母重新排列,可以得到不同的单词,如LANQIAO、AAILNOQ等,注意这7个字母都要被用上,单词不一定有具体的英文意义。
  请问,总共能排列如多少个不同的单词。
答案提交
  这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

全排列   答案:2520
public class Main{
	static Set<String>set = new HashSet<>();
	static StringBuilder sb = new StringBuilder("LANQIAO");
    public static void main(String []args){
    	dfs(0);
    	System.out.println(set.size());
    }
    static void dfs(int idx) {
    	if(idx == sb.length()) {
    		set.add(sb.toString());
    		return;
    	}
    	for(int i = idx;i < sb.length();i ++) {
    		char t = sb.charAt(i);
    		sb.setCharAt(i, sb.charAt(idx));
    		sb.setCharAt(idx, t);
    		
    		dfs(idx+1);
    		
    		t = sb.charAt(i);
    		sb.setCharAt(i, sb.charAt(idx));
    		sb.setCharAt(idx, t);
    	}
    }
}


4.问题描述


在2019个有区别的球中选3个球放在一个盘子里,请问有多少种选法?
答案提交
  这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

直接暴力统计 答案:1369657969
public class Main{
    public static void main(String []args){
    	int ans = 0;
    	for(int i = 1;i <= 2019;i ++) {
    		for(int j = i+1;j <= 2019;j ++) {
    			for(int k = j+1;k <= 2019;k ++) {
    	    		ans ++;
    	    	}
        	}
    	}
    	System.out.println(ans);
    }
}


5.问题描述


小明对类似于 hello 这种单词非常感兴趣,这种单词可以正好分为四段,第一段由一个或多个辅音字母组成,第二段由一个或多个元音字母组成,第三段由一个或多个辅音字母组成,第四段由一个或多个元音字母组成。
  给定一个单词,请判断这个单词是否也是这种单词,如果是请输出yes,否则请输出no。
  元音字母包括 a, e, i, o, u,共五个,其他均为辅音字母。
输入格式
  输入一行,包含一个单词,单词中只包含小写英文字母。
输出格式
  输出答案,或者为yes,或者为no。
样例输入
lanqiao
样例输出
yes
样例输入
world
样例输出
no
评测用例规模与约定
对于所有评测用例,单词中的字母个数不超过100。

思路:预处理字符串,1表示元音,0表示辅音。例如hello 表示为 01001。再合并同类,变为 0101
只有最后的结果为 0101 时,才符合要求
public class Main{
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		while(sc.hasNext()) {
			StringBuilder sb1 = new StringBuilder(sc.next());
			for(int i = 0;i < sb1.length();i ++) {
				if(check(sb1.charAt(i))) {
					sb1.setCharAt(i, '1');
				}else {
					sb1.setCharAt(i, '0');
				}
			}
			StringBuilder sb2 = new StringBuilder();
			sb2.append(sb1.charAt(0));
			for(int i = 1;i < sb1.length();i ++) {
				if(sb1.charAt(i) != sb2.charAt(sb2.length()-1)) {
					sb2.append(sb1.charAt(i));
				}
			}
			if(sb2.toString().equals("0101")) {
				System.out.println("yes");
			}else {
				System.out.println("no");
			}
		}
	}
	static boolean check(char c) {
		return c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u';
	}

}

6.问题描述


给定两个正整数 n 和 m,请问在整数 1 至 n 中,各位数字的平方和为 m 的总共有多少个?
  例如,当 n=100,m=5 时,只有 12 和 21 各位数字的平方之和为 5,所以答案为 2。
输入格式
  输入的第一行包含两个整数 n 和 m,用一个空格分隔。
输出格式
  输出一行包含一个整数,表示答案。
样例输入
100 5
样例输出
2
评测用例规模与约定
  对于 40% 的评测用例,1 <= n <= 1000,1 <= m <= 1000。
  对于所有评测用例,1 <= n <= 1000000,1 <= m <= 1000。
 

水题 直接一次遍历过
public class Main{
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		int m = sc.nextInt();
		int ans = 0;
		for(int i = 1;i <= n;i ++) {
			if(check(i,m)) {
				ans ++;
			}
		}
		System.out.println(ans);
	}
	static boolean check(int num,int m) {
		int sum = 0;
		while(num != 0) {
			int t = num % 10;
			sum += t*t;
			num /= 10;
		}
		return sum == m;
	}
}

7.问题描述


给定三个整数 a, b, c,如果一个整数既不是 a 的整数倍也不是 b 的整数倍还不是 c 的整数倍,则这个数称为反倍数。
  请问在 1 至 n 中有多少个反倍数。
输入格式
  输入的第一行包含一个整数 n。
  第二行包含三个整数 a, b, c,相邻两个数之间用一个空格分隔。
输出格式
  输出一行包含一个整数,表示答案。
样例输入
30
2 3 6
样例输出
10
样例说明
  以下这些数满足要求:1, 5, 7, 11, 13, 17, 19, 23, 25, 29。
评测用例规模与约定
  对于 40% 的评测用例,1 <= n <= 10000。
  对于 80% 的评测用例,1 <= n <= 100000。
  对于所有评测用例,1 <= n <= 1000000,1 <= a <= n,1 <= b <= n,1 <= c <= n。
 

import java.util.*;
public class Main{
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		int a = sc.nextInt();
		int b = sc.nextInt();
		int c = sc.nextInt();
		int ans = 0;
		for(int i = 1;i <= n;i ++) {
			if(i % a != 0 && i % b != 0 && i % c != 0) {
				ans ++;
			}
		}
		System.out.println(ans);
	}
}

8.问题描述


对于一个 n 行 m 列的表格,我们可以使用螺旋的方式给表格依次填上正整数,我们称填好的表格为一个螺旋矩阵。
  例如,一个 4 行 5 列的螺旋矩阵如下:
  1 2 3 4 5
  14 15 16 17 6
  13 20 19 18 7
  12 11 10 9 8
输入格式
  输入的第一行包含两个整数 n, m,分别表示螺旋矩阵的行数和列数。
  第二行包含两个整数 r, c,表示要求的行号和列号。
输出格式
  输出一个整数,表示螺旋矩阵中第 r 行第 c 列的元素的值。
样例输入
4 5
2 2
样例输出
15
评测用例规模与约定
  对于 30% 的评测用例,2 <= n, m <= 20。
  对于 70% 的评测用例,2 <= n, m <= 100。
  对于所有评测用例,2 <= n, m <= 1000,1 <= r <= n,1 <= c <= m。
 

public class Main{
	static int [][]arr = new int [1005][1005];
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		int m = sc.nextInt();
		int R = sc.nextInt();
		int C = sc.nextInt();
		int cnt = 0,r = 1,c = 0;;
		while(cnt != n * m) {
			while(c < m && arr[r][c+1] == 0) arr[r][++c] = ++ cnt;
			while(r < n && arr[r+1][c] == 0) arr[++r][c] = ++ cnt;
			while(c > 1 && arr[r][c-1] == 0) arr[r][--c] = ++ cnt;
			while(r > 1 && arr[r-1][c] == 0) arr[--r][c] = ++ cnt;
		}
		System.out.println(arr[R][C]);
	}
}

9.问题描述

 

求符合要求序列的个数:
第一个数为正整数n
第二个数为小于等于n的正整数
从第三位数开始,每一位数为小于前两位的差的绝对值的正整数
输入格式
  输入一行包含一个整数 n。
输出格式
  输出一个整数,表示答案。答案可能很大,请输出答案除以10000的余数。
样例输入
4
样例输出
7
样例说明
  以下是满足条件的序列:
  4 1
  4 1 1
  4 1 2
  4 2
  4 2 1
  4 3
  4 4
评测用例规模与约定
  对于 20% 的评测用例,1 <= n <= 5;
  对于 50% 的评测用例,1 <= n <= 10;
  对于 80% 的评测用例,1 <= n <= 100;
  对于所有评测用例,1 <= n <= 1000。
 

10.问题描述


受大西线调水工程启发,小明也准备设计一条调水的水渠。
  小明经费有限,他只能在一块有限区域内建立一条简单的水渠。
  小明首先勘探了地形,在这块地中有一处水源,必须用作水渠的起点。另外,小明还测量了一些点,包括点的位置和高度。如果两个小明测量的点之间的距离不超过 d 且高度不同,小明就可以在这两点之间建立一段水渠,让水从高处流向低处,这一段的长度为两点之间的直线距离(即将横坐标的差的平方加上纵坐标的差的平方加上高度差的平方后再开平方根)。
  小明计划只修一条主水渠,不建立分支的水渠。由于水渠能影响的范围与水渠的长度正相关,小明希望水渠尽可能长。
  请注意,水渠必须从水源开始修,并且高度应当递减。水渠的不同段可能交叉(建个桥即可)。
输入格式
  输入的第一行包含一个整数 n ,表示小明已经测量的点数。
  接下来 n 行,每行三个整数 x, y, h,分别表示测量的点坐标为 (x, y),高度为 h。这部分的第一个点即为水源,第一个点的h值大于其他点的h值。
  接下来一行包含一个整数 d。
输出格式
  输出一行,包含一个实数,四舍五入保留 2 位小数,表示水渠最长能修多长。
样例输入
5
1 1 10
2 3 8
4 5 9
1 2 5
4 5 5
8
样例输出
10.66
样例说明
  在这些点中有两个坐标为 (4, 5) 的点,这是允许的。
评测用例规模与约定
  对于 30% 的评测用例,1 <= n <= 10;
  对于 60% 的评测用例,1 <= n <= 20;
  对于所有评测用例,1 <= n <= 1000,0 <= h <= 10000,0 <= x, y <= 10000,0 < d < 1e7(10的7次方)。
 

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值