第十三届蓝桥杯——java B组(部分题目)

A.星期计算

B.山

C.字符统计

D.最少刷题

目录

A.星期计算

B.山

C.字符统计

D.最少刷题数


A.

 这题直接求20的22次方然后对7取余,结果加上6则为答案。

public class test {

	public static void main(String[] args) {
		System.out.println(Math.pow(20, 22)%7);//结果为1,

	}

}

答案:7

B.

 这个题目考试时,没跑出来,当时只想起用字符串处理回文,不知道如何使前半部分不单调减,后半部分不单调增。后来想了下,直接暴力,分别遍历字符串的前后部分并判断是否相等即可。大概要跑个2min左右。

public class test6 {
	public static void main(String[] args) {
		Scanner in=new Scanner(System.in);
		int count=0;
		for(int i=2022;i<=2022222022;i++){//3138
			String s=i+"";
			int l=s.length();
			String st=s.charAt(0)+"";
			String str=s.charAt(s.length()-1)+"";
			if(l%2!=0){//字符长度为奇数时
				
				for(int j=1;j<(l+1)/2;j++){//前半部分,从前遍历
					if(s.charAt(j)>=s.charAt(j)-1){
						st+=s.charAt(j);
					}
					else{
						break;
					}
				}
				for(int j=s.length()-2;j>=(l-1)/2;j--){//后半部分,从后遍历
					if(s.charAt(j)>=s.charAt(j+1)){
						str+=s.charAt(j);
					}
					else{
						break;
					}
				}
			}
			else{//字符长度为偶数时
				
				for(int j=1;j<l/2;j++){//前半部分
					if(s.charAt(j)>=s.charAt(j)-1){
						st+=s.charAt(j);
					}
					else{
						break;
					}
				}
				for(int j=s.length()-2;j>=l/2;j--){//后半部分
					if(s.charAt(j)>=s.charAt(j+1)){
						str+=s.charAt(j);
					}
					else{
						break;
					}
					
				}
			}
			if(st.equals(str)){//判断前后是否相等,回文
				//System.out.println(st+" "+str);
				count++;
			}
		}
		System.out.println(count);//3138
	}
}

答案:3138

C.

 这题本来是送分题,结果在敲代码的时候,不知道如何存取,相同次数的字母,自己简直太菜了,后又想了段暴力的代码。

public class test2 {
	public static void main(String[] args) {
		HashSet<String> h=new HashSet<String>();//用不到,考试的时候想存放到哈希表中读取
		Scanner in=new Scanner(System.in);
		String str=in.next();
		String ss ="";//存放字母
		int count=1,con=-1;//初始数值
		for(int i=0;i<str.length();i++){//依次遍历字符串
			count=1;
			for(int j=i+1;j<str.length();j++){
				if(str.charAt(i)==str.charAt(j)){
					count++;
				}
			}
			if(count>con){//更新数值,和字母
				con=count;
				ss=str.charAt(i)+"";
			}
			else if(count==con){//出现次数相同时,后面加上即可
				ss+=str.charAt(i)+"";
			}
		}
			System.out.print(ss);
	}
}

D.

 这题做的也吐了,本想通过暴力,多重判断,不过总是出现bug,到最后才想起来,利用中位数进行判断。新建一个数组,并且将输入数据的数组,和这个数组一样,然后将这个数组进行排序,遍历自己输入的数组,和中位数进行比较,小于中位数的话,就用中位数的数字减去所遍历的数字再加1.本以为写的没毛病,后面结束后,无意发现没有处理特殊的情况,当一组数据出现相同的数字时,没有考虑到。简直了,整个卷子就没拿到分。

public class test3 {

	public static void main(String[] args) {
		Scanner in =new Scanner(System.in);
		int N=in.nextInt();
		int[]arr=new int[N];//输入的数组
		int[]arr1=new int[N];//临时数组来进行排序
		int[]tm=new int[N];//存放要刷题目的数组
		for(int i=0;i<arr.length;i++){
			arr[i]=in.nextInt();
		}
		for(int i=0;i<arr1.length;i++){//将初始的数组赋值给新建数组
			arr1[i]=arr[i];
		}
		Arrays.sort(arr1);

		int l=arr1.length;
		if(l%2!=0){//数据大小为奇数时
			for(int i=0;i<arr.length;i++){
				if(arr[i]>=arr1[(l+1)/2-1]){//数据小于中位数时
					tm[i]=0;
				}
				else{
					tm[i]=arr1[(l+1)/2-1]-arr[i]+1;
				}
			}
		}
		else{//数据大小为偶数时
			for(int i=0;i<arr.length;i++){
				if(arr[i]>=arr1[(l)/2]){
					tm[i]=0;
				}
				else{
					tm[i]=arr1[l/2]-arr[i];//!!!在这里不用再加一,考试时处理错了,呜呜呜
				}
			}
		}
		for(int i=0;i<tm.length;i++){
			System.out.print(tm[i]+" ");
		}
	}

}

下面的题目当时也没做出来,后续有见解第一时间更。第一次参加蓝桥杯,做的什么也不是,也难怪自己还是个大一的小菜b。本次就无缘了,全当陪跑喽~~

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值