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

A.128的倍数

问题描述

请问在10000 (含) 到90000 (含)中, 有多少个数是128的倍数。

答案提交

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

参考答案

625

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);
	}
}

B.特殊年份

 问题描述

2021是一个特殊的年份,它的千位和十位相同,个位比百位多一。请问从1000 (含)到9999 (含)有多少个这样的年份?

答案提交

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

参考答案

81

public class Main {
	public static void main(String[] args) {
		int ans=0;
		for(int i=1000;i<=9999;i++) {
			int ge=i/1%10;
			int shi=i/10%10;
			int bai=i/100%10;
			int qian=i/1000%10;
			if(shi==qian&&bai+1==ge) {
				ans++;
			}
		}
		System.out.println(ans);
	}
}

C.奇不动排列 

问题描述

如果1到n的一个排列中,所有奇数都在原来的位置上,称为一个奇不动排列。

例如,1到7的排列(1,6,3,4,5,2, 7)是一一个奇不动排列,因为1, 3, 5, 7都在原来的位置上。

请问,1到21的所有排列中,有多少个奇不动排列。

答案提交

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

参考答案

362880

①暴力

public class Main {
	public static void main(String[] args) {
		int ans=0;
		for(int a1=1;a1<=10;a1++) {
			for(int a2=1;a1<=10;a1++) {
				for(int a3=1;a3<=10;a3++) {
					for(int a4=1;a4<=10;a4++) {
						for(int a5=1;a5<=10;a5++) {
							for(int a6=1;a6<=10;a6++) {
								for(int a7=1;a7<=10;a7++) {
									for(int a8=1;a8<=10;a8++) {
										for(int a9=1;a9<=10;a9++) {
											for(int a10=1;a10<=10;a10++) {
												if(a1!=a2&&a1!=a3&&a1!=a4&&a1!=a5&&a1!=a6&&a1!=a7&&a1!=a8&&a1!=a9&&a1!=a10&&
														a2!=a3&&a2!=a4&&a2!=a5&&a2!=a6&&a2!=a7&&a2!=a8&&a2!=a9&&a2!=a10&&
														a3!=a4&&a3!=a5&&a3!=a6&&a3!=a7&&a3!=a8&&a3!=a9&&a3!=a10&&
														a4!=a5&&a4!=a6&&a4!=a7&&a4!=a8&&a4!=a9&&a4!=a10&&
														a5!=a6&&a5!=a7&&a5!=a8&&a5!=a9&&a5!=a10&&
														a6!=a7&&a6!=a8&&a6!=a9&&a6!=a10&&
														a7!=a8&&a7!=a9&&a7!=a10&&
														a8!=a9&&a8!=a10&&
														a9!=a10) {
													ans++;
												}
											}
										}
									}
								}
							}
						}
					}
				}
			}
		}
		System.out.println(ans);
	}
}

②全排列

从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列。当m=n时所有的排列情况叫全排列。(本题为从n=10个元素中取出m=10个元素,所以为全排列,直接求10的阶乘)。

公式:全排列数f(n)=n!(定义0!=1)

public class Main {
	public static void main(String[] args) {
		int ans=1;
		for(int i=2;i<=10;i++) {
			ans=ans*i;
		}
		System.out.println(ans);
	}
}

D.上楼梯 

问题描述

小蓝要上一个楼梯,共15级台阶。

小蓝每步可以上1级台阶,也可以上2级、3级或4级,移就没办法一步走到了。

每级台阶上有一个数值,可能正也可能负。每次走到一级台阶上,小蓝的得分就加上这级台阶上的数值。

台阶上的数值依次为: 1,2, 1,1,1,1,5,5,4,-1,-1,-2,-3,-1,-9.

小蓝希望不超过6步走到台阶顶端,请问他得分的最大值是多少?

注意,小蓝开始站在地面上,地面没有分值。他最终要走到台阶顶端,所以最终一定会走到数值为-9的那级台阶,所以-9一定会加到得分里面。

答案提交

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

参考答案

5

E.递增三元组

问题描述

在数列a[1], a[2], ... a[n]中,如果对于下标ij, k满足0

请问对于下面的长度为20的数列,有多少个递增三元组?

2, 9, 17,4, 14, 10, 25, 26, 11,14, 16, 17, 14,21, 16, 27, 32, 20, 26, 36。

答案提交

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

参考答案

565

public class Main {
	public static void main(String[] args) {
		int ans=0;
		int[] a=new int[] {0, 2, 9, 17,4, 14, 10, 25, 26, 11,14, 16, 17, 14,21, 16, 27, 32, 20, 26, 36};
		for(int i=1;i<=18;i++) {
			for(int j=i+1;j<=19;j++) {
				for(int k=j+1;k<=20;k++) {
					if(a[i]

F.路程 

问题描述

小蓝开车在高速上行驶了t小时,速度固定为每小时v千米,请问小蓝在高速上行驶了多长路程?

输入格式

输入一行包合两个整数t、v, 用一个空格分隔。

输出格式

输出一行包含一个整数,表示答案。 

样例输入

3 81

样例输出

243

评测用例规模与约定

对于所有评测用例,1 <=t<= 10, 1 <=v<= 150。

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

G.棋盘染色问题

问题描述

 有一个n * m的棋盘,现在对这个棋盘进行黑白染色,左上角染成黑色。从左上角开始,每个黑色格的相邻格染成白色,白色格的相邻格染成黑色。

以下给出了一个5*7的棋盘的染色示例。

给定n和m,请问棋盘上一共有多少方格被染成了色。

输入格式

输入一行包含两个整数n, m,用一个空格分隔。

输出格式

输出一行包含一个整数,表示答案。

样例输入

5 7

样例输出

18

评测用例规模与约定

对于50%的评测用例,1 <= n, m <= 10000。

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

import java.util.*;
public class Main {
	public static void main(String[] args) {
		int sum=0;
		Scanner scan=new Scanner(System.in);
		int n=scan.nextInt();
		int m=scan.nextInt();
		if(m%2==0) {
			for(int i=1;i<=n;i++) {
				sum+=m/2;
			}
		}
		else {
			for(int i=1;i<=n;i++) {
				if(i%2!=0) {
					sum+=m/2+1;
				}
				else {
					sum+=m/2;
				}
			}
		}
		System.out.println(sum);
	}
}

H.最大停车位 

问题描述 

小蓝要在路边划分停车位。他将路边可停车的区域划分为L个整数小块,编号1至L。一个车位需要连续的k个小块,停车位不能重叠。有的小块属于井盖、消防通道等区域,不能停车。请问小蓝最多划分出多少个停车位?

输入格式

输入的第一行包含三个整数L、k、n,分别表示小块数量。一个车位需要的小块数量和不能停车的小块数量,相邻整数之间用一个空格分隔。

第二行包含n个整数a[1], a[2], ... a[n],按从小到大的顺序排列,相邻的整数间用空格分隔,示这些位置不能停车。

输出格式

输出一行包含一个整数, 表示答案。

样例输入

100 10 2

25 91

样例输出

8

import java.util.*;
public class Main {
    public static void main(String[] args) {
    	int count=0;
        Scanner scan=new Scanner(System.in);
        int L=scan.nextInt();
        int k=scan.nextInt();
        int n=scan.nextInt();
        int b=L/k;
        int[] a=new int[n+1];
        for(int i=1;i<=n;i++) {
        	a[i]=scan.nextInt();
        }
        for(int i=1;i<=L;i=i+k) {
        	for(int j=i;j<=i+k-1;j++) {
        		for(int s=1;s

 I.人字排列

问题描述

一个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。

输出格式

输出一行包含一个整数, 示答案,答案可能很大,请输出答案除以100000007的余数。

样例输入

5

样例输出

6

import java.util.*;
public class Main {
    static int count=0;
    static int mod=100000007;
    static Scanner scan=new Scanner(System.in);
    static int n=scan.nextInt();
    static int[] a=new int[n];
    static int[] biaoji=new int[n];
    static int[] ans=new int[n];
    public static void main(String[] args) {
        a[n/2]=n;
        dfs(0);
        System.out.println(count%mod);
    }
    public static void dfs(int x) {
        if(x==n) {
            for(int i=0;ians[i-1]) {
                return false;
            }
        }
        return true;
    }
}

J.教学楼

问题描述

著名设计师小蓝给蓝桥小学设计了一个教学楼。

蓝桥小学经常下雨,所以校长希望教学楼任何地方都可以连通到其它地方。

小蓝给出了教学楼的平面图,用一个n行m列的01矩阵示,中0表示空地, 1表示教学楼。两个相邻的1 (上下相邻或左右相邻)之间互相可达。

请帮小蓝检查一下, 否教学楼的任意两个地方都可以连通到其它地方。

输入格式

输入的第一行包含两个整数n, m,用一个空格分隔。

接下来n行,每行一个长度为m的01串,示教学楼的平面图。

如果满足要求,输出"YES” ,否则输出"NO”,请注意母全部都是大写。

import java.util.*;
public class Main {
	static int[][] a;
    public static void main(String[] args) {
        Scanner scan=new Scanner(System.in);
        int count=0;
        int n=scan.nextInt();
        int m=scan.nextInt();
        a=new int[n+2][m+2];
        for(int i=1;i<=n;i++){
            String str=scan.next();
            for(int j=0;j0) {
        	System.out.println("NO");
        }
        else {
        	System.out.println("YES");
        }
        
    }
    public static boolean check(int x,int y){
        int count=0;
        if(a[x-1][y]==0){
            count++;
        }
        if(a[x][y-1]==0){
            count++;
        }
        if(a[x][y+1]==0){
            count++;
        }
        if(a[x+1][y]==0){
            count++;
        }
        if(count==4){
            return true;
        }
        return false;
    }
}

你可能感兴趣的:(蓝桥杯,算法,职场和发展)