蓝桥杯十一届模拟赛

1.单位变换

  • 题目

在计算机存储中,15.125GB是多少MB?

  • 知识点

1MB = 1024KB
1KB = 1024B
1B = 8bit ( B 为字节,bit 为位)

  • 答案

15.125 * 1024 = 15488M


2. 约数个数

  • 题目

1200000有多少个约数(只计算正约数)。

  • 代码
public class LQB02 {
	public static void main(String[] args) {
		int x = 1200000;
		int count = 0;
		for (int i = 1; i <= x; i++) {
			if(x % i == 0)
				count++;
		}
		System.out.println(count);
	}
}
  • 答案:96

3.叶结点数

  • 题目

一棵包含有2019个结点的二叉树,最多包含多少个叶结点?

  • 知识点

二叉树:树中包含的各个节点的度不能超过 2,即只能是 0、1 或者 2;
对于任何一课二叉树,度为0的结点数(即叶节点) = 度为2的节点数 + 1

  • 当二叉树的总个数为奇数时,此二叉树"无度为1"的结点
  • 当二叉树的总个数为偶数时,
    此二叉树"只有一个度为1"的结点
  • 答案:

设度为2的结点为n个, 由于2019是奇数,所以二叉树没有度为1的结点。
·n + ( n + 1 ) = 2019 ==> n = 1009
最多包含1010个叶节点

4.数字9

  • 题目

在1至2019中,有多少个数的数位中包含数字9?
注意,有的数中的数位中包含多个9,这个数只算一次。例如,1999这个数包含数字9,在计算时只是算一个数

  • 代码①
public class LQB04 {
	public static void main(String[] args) {
		int count = 0;
		for (int i = 9; i <= 2019; i++) {
			String s = Integer.toString(i);
			if(s.contains("9"))
				count++;
		}
		System.out.println(count);
	}
}
  • 代码②
public class LQB04 {
	public static void main(String[] args) {
		int count = 0;
		for (int i = 9; i <= 2019; i++) {
			if(judge(i))
				count++;
		}
		System.out.println(count);
	}
	public static boolean judge(int i){
		while (i > 0) {
			if(i % 10 == 9){
				return true;
			}
			i = i / 10;	
		}
		return false;
	}
}

  • 答案:544

5.数位递增的数

  • 题目

题目描述:
一个正整数如果任何一个数位不大于右边相邻的数位,则称为一个数位递增的数,例如1135是一个数位递增的数,而1024不是一个数位递增的数。
给定正整数 n,请问在整数 1 至 n 中有多少个数位递增的数?
输入格式:
输入的第一行包含一个整数 n。
输出格式:
输出一行包含一个整数,表示答案。
样本输入:
30
样本输出:
26

  • 代码
public class LQB05 {
	public static void main(String[] args) {
		Scanner cin = new Scanner(System.in);
		int n = cin.nextInt();
		int count = 0;
		for(int i = 1; i <= n; i++){
			String s = Integer.toString(i);
			boolean flag = true;
			for (int j = 0; j < s.length()-1 ; j++ ){
				if(s.charAt(j) > s.charAt(j+1)){
					flag = false;
				}
			}
			if(flag)
				count++;
		}
		System.out.println(count);
	}
}

6.递增三元组

  • 题目

题目描述:
在数列 a[1], a[2], …, a[n] 中,如果对于下标 i, j, k 满足 0 < i < j < k < n+1 且 a[i] < a[j] < a[k],则称 a[i], a[j], a[k] 为一组递增三元组,a[j]为递增三元组的中心。
给定一个数列,请问数列中有多少个元素可能是递增三元组的中心。
输入格式:
输入的第一行包含一个整数 n。
第二行包含 n 个整数 a[1], a[2], …, a[n],相邻的整数间用空格分隔,表示给定的数列。
输出格式:
输出一行包含一个整数,表示答案。
样本输入:
5
1 2 5 3 5
样本输出:
2

  • 思路

枚举每一个数,看左边有没有比它小的 && 右边有没有比它大的,如果符合条件,count++。

  • 代码
public class LQB06 {
	public static void main(String[] args) {
		Scanner cin = new Scanner(System.in);
		int n = cin.nextInt();
		int[] arr = new int[n];
		int count = 0;
		for (int i = 0; i < n; i++)
			arr[i] = cin.nextInt();
		for (int i = 1; i < n; i++) {
			int big = 0;
			int small = 0;
			for(int j = 0; j < i; j++) {
				if(arr[i] > arr[j]){
					small = 1;
					break;
				}	
			}
			for(int j = i+1; j < n; j++) {
				if(arr[i] < arr[j]){
					big = 1;
					break;
				}	
			}
			if(big == 1 && small == 1)
				count++;
		}
		System.out.println(count);
	}
}

7.音节判断

  • 题目

题目描述:
小明对类似于 hello 这种单词非常感兴趣,这种单词可以正好分为四段,第一段由一个或多个辅音字母组成,第二段由一个或多个元音字母组成,第三段由一个或多个辅音字母组成,第四段由一个或多个元音字母组成。
给定一个单词,请判断这个单词是否也是这种单词,如果是请输出yes,否则请输出no。
元音字母包括 a, e, i, o, u,共五个,其他均为辅音字母。
输入格式:
输入一行,包含一个单词,单词中只包含小写英文字母。
输出格式:
输出答案,或者为yes,或者为no。
样本输入:
lanqiao
world
样本输出:
yes
no

  • 正则表达式

字符的取值范围
1.[abc] : 表示可能是a,可能是b,也可能是c。
2.[^abc]: 表示不是a,b,c中的任意一个
3.[a-zA-Z]: 表示是英文字母
4.[0-9]:表示是数字
简洁的字符表示
.:匹配任意的字符
\d:表示数字
\D:表示非数字
\s:表示由空字符组成,[ \t\n\r\x\f]
\S:表示由非空字符组成,[^\s]
\w:表示字母、数字、下划线,[a-zA-Z0-9_]
\W:表示不是由字母、数字、下划线组成
数量表达式
1.?: 表示出现0次或1次
2.+: 表示出现1次或多次
3.*: 表示出现0次、1次或多次
4.{n}:表示出现n次
5.{n,m}:表示出现n~m次
6.{n,}:表示出现n次或n次以上

  • 代码①
import java.util.Scanner;
import java.util.regex.*;

public class LQB07 {
	public static void main(String[] args) {
		String pattern = "[^aeiou]+[aeiou]+[^aeiou]+[aeiou]+";
		Pattern p = Pattern.compile(pattern);
		Scanner cin = new Scanner(System.in);
		String s = cin.next();		
		Matcher  m = p.matcher(s);
		boolean flag = m.matches();
		if(flag)
			System.out.println("yes");
		else
			System.out.println("no");		
	}
}
  • 代码②
public class LQB07 {
	public static void main(String[] args) {
		Scanner cin = new Scanner(System.in);
		String s = cin.next();
		if(result(s))
			System.out.println("yes");
		else
			System.out.println("no");
	}
	//判断yes or no
	static boolean result(String s ){
		if(s.length() < 4)
			return false;
		if(isYuan(s.charAt(0)) || !isYuan(s.charAt(s.length()-1)))
			return false;
		int count = 0;
		int[] yuan = new int[s.length()];
		for (int i=0;i<s.length();i++) {
			if(isYuan(s.charAt(i)))
				yuan[i] = 1;
			else 
				yuan[i] = 0; 
		}
		for(int i=1;i<s.length();i++){
			if(yuan[i-1]+yuan[i]==1)
				count++;
		}
		return count==3;
	}
	//判断是否为元音字母
	public static boolean isYuan(char c) {
		if(c=='a'||c=='e'||c=='i'||c=='o'||c=='u')
			return true;
		else 
			return false;
	}
}


8.种地

  • 题目

题目描述:
小明有一块空地,他将这块空地划分为 n 行 m 列的小块,每行和每列的长度都为 1。
小明选了其中的一些小块空地,种上了草,其他小块仍然保持是空地。这些草长得很快,每个月,草都会向外长出一些,如果一个小块种了草,则它将向自己的上、下、左、右四小块空地扩展,这四小块空地都将变为有草的小块。
请告诉小明,k 个月后空地上哪些地方有草。
输入格式:
输入的第一行包含两个整数 n, m。
接下来 n 行,每行包含 m 个字母,表示初始的空地状态,字母之间没有空格。如果为小数点,表示为空地,如果字母为 g,表示种了草。
接下来包含一个整数 k。
输出格式:
输出 n 行,每行包含 m 个字母,表示 k 个月后空地的状态。如果为小数点,表示为空地,如果字母为 g,表示长了草。
样本输入:
4 5
.g…

…g…

2
样本输出:
gggg.
gggg.
ggggg
.ggg.

  • 代码
import java.util.Scanner;

public class LQB08 {
	public static void main(String[] args) {
		Scanner cin = new Scanner(System.in);
		int n = cin.nextInt();
		int m = cin.nextInt();
		char[][] c = new char[n][m];
		char[][] cc = new char[n][m];
		for(int i=0;i<n;i++){
			String s = cin.next();
			c[i] = s.toCharArray();
			cc[i] = s.toCharArray();
		}
		
		int k = cin.nextInt();
		while(k!=0){
			for(int i=0;i<n;i++){
				for(int j=0;j<m;j++){
					
					if(c[i][j] == 'g'){
						if(i>0)
							cc[i-1][j]='g';//上
						if(i<n-1)
							cc[i+1][j]='g';//下
						if(j>0)
							cc[i][j-1]='g';//左
						if(j<m-1)
							cc[i][j+1]='g';//右		
					}
				}
			}
			k--;
			for(int i=0;i<n;i++)
			{
				for(int j=0;j<m;j++)
				{
				   c[i][j]=cc[i][j];	
				}
			}
		}

		for(int i=0;i<n;i++){
			for(int j=0;j<m;j++){
				System.out.print(c[i][j]);
			}
			System.out.println();
		}
	}
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值