练习Day——8(蓝桥杯模拟赛1(大学生组&青少年组))

蓝桥杯模拟赛1(大学生组&青少年组)

A. 试题A:战疫情 5’

描述
【问题描述】

为抗击新型冠状病毒感染的肺炎疫情,爱心人士小李花费5000050000元人民币购买xx只口罩,yy套防护服。已知x+yx+y的和在区间[20000, 21000].[20000,21000].
请问有多少种购买方案,是刚好花费5000050000元人民币的!
已知口罩价格22元/只,防护服价格100100元/套。

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

import java.util.Scanner;

public class Main {
	public static void main(String[]args) {
		Scanner scan=new Scanner(System.in);
		int a,b;//口罩、防护服的数量
		double x=50000,ax=2,bx=100;
		int n=0;
		for(a=20000;a<=21000;a++) {
			for(b=100;b>=0;b--) {
				int amount=2*a+b*100;
				if(amount==50000)
					n++;
			}
		}
		System.out.println(n);
	}
}

B. 试题B:行动 5’

描述
在这里插入图片描述
【问题描述】
小明站在坐标(0, 0)(0,0)处,面朝 xx轴正方向。第一轮,他向前走 11单位距离,然后右转;第二轮,他向前走 22单位距离,然后右转;第三轮,他向前走 33单位距离,然后右转……他一直这么走下去。请问第 20202020轮后,他的坐标是:(_________,_________)。

public class Main {
	public static void main(String[]args) {
		int x=2020/4;
		int a=2*x;
		System.out.print((-1)*a+" "+a);
	}
}

【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为两个个数字,依次为x\ yx y,在提交答案时依次填写这两个数字,用一个空格隔开,填写多余的内容将无法得分。

C. 试题C:莱布尼茨公式 10’

描述
【问题描述】

已知,莱布尼茨的公式为:

可以通过莱布尼茨公式来计算\piπ的结果,当计算的项数越多,\piπ 的精确度越高。请计算前20202020项的值,保留66位小数。即:
【答案提交】

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

public class Main {
	public static void main(String[]args) {
		double p=0.0,q;
		for(int i=1;i<=2020;i++) {
			if(i%2==0) {
				q=2*i-1;
				p=p-1.0/q;
			}
			else if(i%2!=0) {
				q=2*i-1;
				p=p+1.0/q;
			}
		}
		p*=4;
		System.out.printf("%.6f",p);
	}
}

D. 试题D:价值之和 10’

描述
【问题描述】

定义数字x的价值为其不同质因子的个数。
例如:数字20202020可以写成2020=225*1012020=2∗2∗5∗101,其价值为33.
JM boy请你帮忙计算整数11到20202020中,所有都不包含数字55的正整数的价值之和。

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

public class Main {
	public static void main(String[]args) {
		int sum=0;
		for(int i=1;i<=2020;i++) {
			if(!func1(i)) {
				sum+=func2(i);
			}
		}
		
		System.out.println(sum);
	}
	
	//判断整数中是否包含5,包含返回true,不包含返回false
    public static boolean func1(int n) {
    	int num=n;
    	while(num>0) {
    		if(num%10==5)
    			return true;
    		else
    			num/=10;
    	}
    	return false;
    }
    
    //计算不同的质因子的个数
    public static int func2(int n) {
    	int sum=0;
    	for(int i=1;i<=n;i++) {
    		if(n%i==0 && isPrime(i)) {
    			sum++;
    		}
    	}
    	return sum;
    }

	private static boolean isPrime(int n) {
		if(n<2)
			return false;
		else {
			for(int i=2;i<n/2+1;i++) {
				if(n%i==0)
					return false;
			}
			return true;
		}
	}
}

E. 试题E:数方 15’

描述
【问题描述】

在右图AA到II的99个格子中填入1-91−9中的任意数字,不要求每一个数字都填入,也不要求每一个数字只能填一次。
在这里插入图片描述
但是,得满足以下条件:

1、 数字ABCABC构成的三位数ABCABC是一个立方数

2、 数字DEFDEF构成的三位数DEFDEF是一个质数

3、 数字GHIGHI构成的三位数GHIGHI是一个平方数

4、 数字ADGADG构成的三位数ADGADG是一个三角数

5、 数字BEHBEH构成的三位数BEHBEH是一个四次方数

6、 数字CFICFI构成的三位数CFICFI是一个回文数

提示:三角数即正整数前nn项和:1, 3, 6, 10, 15, 21, 28, ……1,3,6,10,15,21,28,……

【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为九个数字,依次为A B C D E F G H I,在提交答案时依次填写这九个数字,相邻两个数字用一个空格隔开,填写多余的内容将无法得分。

public class Main{
	//判断一个数是否为立方数
	public static boolean lifangshu(int i){
			boolean k=false;
			for(int j=1;j<=Math.pow(i, 1/2.9);j++){
				if(i==j*j*j){
					return true;
				}
			}
		return false;
		
	}
		
	//判断一个数是否为质数
	public static boolean zhishu(int i){
		for(int j=2;j<i/2;j++){
		    if(i%j==0){
			    return false;
			}
		}
		return true;
	}
	
	//判断一个数是否为三角数
	public static boolean sanjiaoshu(int i){
		for(int j=14;j<45;j++){
			if(i==j*(j+1)/2){
				return true;
			}
		}
		return false;
	}
		
	//判断一个数是否为平方数
	public static boolean pingfangshu(int i) {
		if(Math.round(Math.sqrt(i))==Math.sqrt(i))
			return true;
		else
			return false;
	}


	//输出四次方数
	public static boolean sicifang(int i)
	{
		boolean k=false;
		for(int j=1;j<=Math.pow(i, 1/4.0);j++)
		{
			if(i==j*j*j*j)
			{
				k=true;
			}
		}	
		return k;
		
	}


	public static void main(String[] args) {
	for(int A=1;A<=9;A++) {
		for(int B=1;B<=9;B++) {
			for(int C=1;C<=9;C++) {
				if(!lifangshu(A*100+B*10+C)) continue;//ABC立方数
				for(int D=1;D<=9;D++) {
					for(int E=1;E<=9;E++) {
						for(int F=1;F<=9;F++) {
							if(!zhishu(D*100+E*10+F))continue;//DEF质数
							for(int G=1;G<=9;G++) {
								if(!sanjiaoshu(A*100+D*10+G)) continue;//ADG三角数
								for(int H=1;H<=9;H++) {
									if(!sicifang(B*100+E*10+H)) continue;//BEH四次方数
									for(int I=1;I<=9;I++) {
										if(C!=I) continue;//CEI回文数
										if(pingfangshu(G*100+H*10+I)) {//GHI平方数
											System.out.printf("%d %d %d %d %d %d %d %d %d", A,B,C,D,E,F,G,H,I);
										}
									}
								}
							}
						}
					}
				}
			}
		}
	}
}

}


F. 试题F:你好,2020 15’

描述
20202020年,这个年份很特别,20202020从中间分成两个整数,大小形状完全一样。
wlxsq对形如20202020的数字很感兴趣(不包括前导零),在11到12001200中这样的数字包括11、22、3311、22、33、44、55、66、77、88、99、1010、111144、55、66、77、88、99、1010、1111,共1111个,他们的和是26162616。
请问,在11到nn中,所有这样的数的和是多少?

输入
输入一行包含一个整数nn。

输出
输出一行,包含一个整数,表示满足条件的数的和。

import java.util.Scanner;

public class Main {
	public static void main(String[]args) {
		Scanner scan=new Scanner(System.in);
		int n=scan.nextInt();
		int sum=0;
		for(int i=1;i<=1000;i++) {
			if(i>=1 && i<=9) {
				int x=i*11;
				if(x<=n)
				    sum+=x;
				else
					break;
			}
			else if(i>=10 && i<=99) {
				int x=i*101;
				if(x<=n)
				    sum+=x;
				else
					break;
			}
			else if(i>=100 && i<=999) {
				int x=i*1001;
				if(x<=n)
				    sum+=x;
				else
					break;
			}
		}
		System.out.println(sum);
	}
}

G. 试题G:最优值 18’

描述
已知有NN个单词,其排列为PP,编号从11到NN。
每个单词都有一个价值ValueValue,该价值与单词的首字母chch、单词的长度LL,以及该单词在排列中的编号IDID有关。
Value = |ch| * L * ID;Value=∣ch∣∗L∗ID;
|ch|∣ch∣ 表示字母chch对应的数字 a -> 1, b -> 2, ……, z -> 26a−>1,b−>2,……,z−>26
现在,wlxsq想知道,该如何排列这NN个单词,使得其(NN个单词)总价值和最大。请输出最大价值之和。

输入
输入一行包含一个整数nn。
接下来NN行,每行包含一个单词AiAi。

输出
输出最大价值之和。

import java.util.Arrays;
import java.util.Scanner;

public class Main {
	public static void main(String[]args) {
		Scanner scan=new Scanner(System.in);
		int n=scan.nextInt();
		
		long value[]=new long[n];
		
		for(int i=0;i<n;i++) {
			String str=scan.next();
			value[i]=(str.charAt(0)-'a'+1)*str.length();
		}
		
		Arrays.sort(value);//从小到大排列
		int sum=0;
		for(int i=1;i<=n;i++) {
			sum+=value[i-1]*i;
		}
		
		System.out.println(sum);
	}

}

H. 试题H:计算器 22’

描述
我们知道,windows自带calc功能。
wlxsq决定制作一个Calc,该Calc具备求解一元一次方程的功能。
为了简化工作,拒绝花里胡哨。这个方程中,只有一个等号"=",零个或多个加号"+"、减号"-",一种小写字母表示未知数。当然,减号也可是负号。
方程中并没有括号,也没有除号,方程中的字母表示未知数。

输入
仅一行,表示一个合法的方程,包含“+”、“-”、“=”、数字及小写字母。

输出
仅一行,表示答案,形式为“未知元=答案”。对答案保留3位小数,保证答案的绝对值不超过10000。

I. 试题I:对称迷宫 25’

描述
用EXCEL求解迷宫真香~
wlxsq有一个N*NN∗N的网格迷宫,每一个网格都有一个字母编号。
他要从左上角(1,1)(1,1)出发,走到右下角(n,n)(n,n),由于wlxsq很懒,所以他每次只会往右或者往下走一格。
由于最后到终点的路径方案太多太多了,所以wlxsq想让你计算出所有不同的对称的路径个数。
例如:N = 3
在这里插入图片描述
对称路径6条:有ABABA(2条)、ABBBA(4条)
不同的对称路径有: 有ABABA、ABBBA

输入
第一行输入一个数NN,表示迷宫的大小。
接下来输入N*NN∗N的字母迷宫

输出
输出对称路径的数量

J. 试题J:因数个数 25’

描述
求所有 2到 n 的整数中,因数个数第k少的数因数个数是多少。

输入
第一行两个正整数 n,k,即题目描述中的 n,k。

输出
输出仅一行,即因数个数第 k少的数因数个数。

import java.util.Arrays;
import java.util.Scanner;

public class Main {
	public static void main(String[]args) {
		Scanner scan=new Scanner(System.in);
		int n=scan.nextInt();
		int k=scan.nextInt();
		
		int num[]=new int[n-1];//记录对应数字的因数个数
		
		for(int i=2,j=0;i<=n;i++,j++) {
			int sum=0;
			for(int m=1;m*m<=i;m++) {
				if(i%m==0) {
					if(i/m==m)//如果两因子相同,则只加1
						sum++;
					//System.out.println(1);
					else//  如果两因子不相同,则加2
						sum+=2;
				}
			}
			num[j]=sum;
		}
		
		Arrays.sort(num);//排序
		System.out.println(num[k-1]);//输出第k少的数的因数个数
	}
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值