0
点赞
收藏
分享

微信扫一扫

第十三届蓝桥杯模拟赛第一期Java组

吃面多放酱 2022-04-05 阅读 51

模拟赛1

1.倍数

问题描述

请问在10000(含)到90000(含)中,有多少个数是128的倍数。
答案提交
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

package Main;

public class Main {
	public static void main(String[] args) {
		int ans=0;
		for(int i = 10000;i<=90000;i++) {
			if(i%128==0) ans++; 
		}
		System.out.println(ans);//625 
	}
}	

2.特殊的年份

问题描述
2021是一个特殊的年份,它的千位和十位相同,个位比百位多一请问从1000(含)到9999(含)有多少个这样的年份?
答案提交
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

package Main;


public class Main {
	public static void main(String[] args) {
		int ans=0;
		for(int i=1000;i<=9999;i++) {
			if(f(i)) {
				ans++;
//				System.out.println(i);
			}
		}
		System.out.println(ans);//81 
	}
	public static boolean f(int n) {
		int a4= n%10;
		n/=10;
		int a3=n%10;
		n/=10;
		int a2=n%10;
		n/=10;
		int a1=n%10;
		if(a1==a3&&a4==a2+1) return true;
		return false;
	}
}

3.奇不动排列

问题描述
如果1到n的一个排列中,所有奇数都在原来的位置上,称为一个奇不动排列。
例如,1到7的排列(1,6,3,4,5,2,7)是一个奇不动排列,因为1,3,5,7都在原来的位置上
请问,1到21的所有排列中,有多少个奇不动排列。
答案提交
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

package Main;

public class Main {
	public static void main(String[] args) {
		int cnt=0;
		for(int i=1;i<=21;i++) {
			if((i&1)==0) {
				cnt++;
			}
		}
//		System.out.println(cnt);
		int ans=1;
		for(int i=1;i<=cnt;i++) {
			ans*=i;
		}
		System.out.println(ans);//3628800
	}
}

4.上台阶

问题描述
小蓝要上一个楼梯,共15级台阶。
小蓝每步可以上1级台阶,也可以上2级、3级或4级,再多就没办法一步走到了。
每级台阶上有一个数值,可能正也可能负,每次走到一级台阶上,小蓝的得分就加上这级台阶上的数值。
台阶上的数值依次为:1,2,1,1,1,1,5,5,4,-1,-1,-2,-3,-1,-9。
小蓝希望不超过6步走到台阶顶端,请问他得分的最大值是多少?
注意,小蓝开始站在地面上,地面没有分值。他最终要走到台阶顶端,所以最终一定会走到数值为-9的那级台阶,所以-9一定会加到得分里面。
答案提交
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

package Main;

public class Main {
	static int[] a = { 0, 1, 2, 1, 1, 1, 1, 5, 5, 4, -1, -1, -2, -3, -1, -9 };
	static int ans = -999;

	public static void main(String[] args) {
		dfs(0, 0, 0);
		System.out.println(ans);// 5
	}

	public static void dfs(int step, int an, int cnt) {
		if (step > 6)
			return;
		if (step == 6 && cnt != 15)
			return;
		if (cnt == 15) {
			if (an > ans) { 
				ans = an;
			}
		}
		for (int i = 1; i <= 4; i++) {
			int n = cnt + i;
			if (n >= 1 && n <= 15) {
				dfs(step + 1, an + a[n], cnt + i);
			}
		}
	}
}

5.递增三元组

问题描述
在数列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]为递增三元组。
请问对于下面的长度为20的数列,有多少个递增三元组?
2,9,17,4,14,10,25,26,11,14,16,17,14,21,16,27,32,20,26,36。
答案提交
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

package Main;

public class Main {
	public static void main(String[] args) {
		int []a = {0,2,9,17,4,14,10,25,26,11,14,16,17,14,21,16,27,32,20,26,36};
		int ans=0;
		for(int i=1;i<a.length;i++) {
			for(int j=i+1;j<a.length;j++) {
				for(int k=j+1;k<a.length;k++) {
					if(a[i]<a[j]&&a[j]<a[k]) {
						System.out.println(a[i]+" "+a[j]+" "+a[k]);
						ans++;
					} 
				}
			}
		}
		System.out.println(ans);//565
	}
}

6.高速路程

问题描述
小蓝开车在高速上行驶了t小时,速度固定为每小时v千米请问小蓝在高速上行驶了多长路程?
输入格式
输入一行包含两个整数t、v用一个空格分隔。
输出格式
输出一行包含一个整数,表示答案。
样例输入
3 81
样例输出
243
评测用例规模与约定
对于所有评测用例,1<=t<=10,1<=v<=150。

package Main;

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int t = sc.nextInt();
		int v = sc.nextInt();
		System.out.println(t*v);
	}
}
 

7.黑白棋盘

问题描述
有一个nm的棋盘,现在对这个棋盘进行黑白染色,左上角染成黑色。从左上角开始,每个黑色格的相邻格染成白色,白色格的相邻格染成黑色。
以下给出了一个5
7的棋盘的染色示例。
给定n和m,请问棋盘上一共有多少方格被染成了黑色。
输入格式
输入一行包含两个整数n,m,用一个空格分隔。
输出格式
输出一行包含一个整数,表示答案。
样例输入
5 7
样例输出
18
评测用例规模与约定
对于50%的评测用例,1<=n,m<=10000。

对于所有评测用例,1<=n,m<=1000000。

package Main;

import java.util.Scanner;

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=((n+1)/2)*((m+1)/2)+(n/2)*(m-(m+1)/2);
		System.out.println(ans);
	}
}
 

8.停车位

问题描述
小蓝要在路边划分停车位。
他将路边可停车的区域划分为L个整数小块,编号1至L他将路边可停车的区域划分为L个整数小块,编号1至L一个车位需要连续的k个小块,停车位不能重。有的小块属于井盖、消防通道等区域,不能停车。
请问小蓝最多划分出多少个停车位?
输入格式
输入的第一行包含三个整数L、k、n,分别表示小块数量一个车位需要的小块数量和不能停车的小块数量,相邻整数之间用一个空格分隔。
第二行包含n个整数,a[1],a[2],…,a[n] ,按从小到大的顺序排列,相邻的整数间用空格分隔,表示这些位置不能停车。
输出格式
输出一行包含一个整数,表示答案
样例输入
100 10 2
25 91

样例输出

8

package Main;

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int l = sc.nextInt();
		int k = sc.nextInt();
		int n = sc.nextInt();
		int[] a = new int[n + 2];
		a[0] = 1;
		a[n + 1] = l;
		for (int i = 1; i <= n; i++) {
			a[i] = sc.nextInt();
		}
		int ans = 0;
		for (int i = 0; i <= n; i++) {
			if(i==0&&i==n) {
				ans += (a[i + 1] - a[i]+1) / k;
			}
			else if (i == 0 || i == n) {
				ans += (a[i + 1] - a[i]) / k;
			} else {
				ans += (a[i + 1] - a[i] - 1) / k;
			}
		}
		System.out.println(ans);
	}
}

9.人字排列

问题描述
一个1到n的排列被称为人字排列,是指排列中的第1到第(n+1)/2个元素单调递增,第(n+1)/2到第n个元素单调递减。
例如:(2,3,5,8,9,7,6,4,1)是一个人字排列,而(1,2,3)和(2,1,3)都不是人字排列,(2,4,3)也不是一个人字排列(它甚至不是一个1到4的排列)。
请问,1到n的排列中有多少个人字排列?
输入格式
输入一行包含一个奇数n。
输出格式
输出一行包含个整数,表示答案,答案可能很大,请输出答案除以1000000007的余数。
样例输入
5
样例输出
6

10.教学楼

问题描述
著名设计师小蓝给蓝桥小学设计了一个教学楼。
蓝桥小学经常下雨,所以校长希望教学楼任何地方都可以连通到其它地方。
小蓝给出了教学楼的平面图,用一个n行m列的01矩阵表示,其中0表示空地,1表示教学楼。两个相邻的1(上下相邻或左右相邻)之间互相可达。
请帮小蓝检查一下,是否教学楼的任意两个地方都可以连通到其它地方。
输入格式
输入的第一行包含两个整数nm,用一个空格分隔。
接下来n行,每行一个长度为m的01串,表示教学楼的平面图。
输出格式
如果满足要求,输出"YES",否则输出"NO",请注意字母全部都是大写。

举报

相关推荐

0 条评论