第十五届蓝桥杯 JAVA B组赛题回顾

hiahia,去年在C++组两道填空题全错被暴虐,今年转战Java组,裸考的成绩确实有点出乎意料。。今天正好有时间po一下答案

 试题 A: 报数游戏

 枚举一下就能找到规律。答案是202420242024 / 2 * 24

试题 B: 类斐波那契循环数

 

import java.util.*;

public class Main {
	static int END = 10000000;
	public static void main(String[] args) {
	  int MaxNumber = 0;
	  for(int i = 1; i <= END; i ++) {  // 由1开始
		  int Length = GetNumnberLength(i);
		  int Array[] = new int[Length];
		  NumbertoArray(Array, i);
		  int k = 0;
		  while(true) {
			  Array[k] = ListNumberSum(Array);
			  if(Array[k] == i || Array[k] > i) break;  // 要么是类斐波那契循环数要么不是
			  k = (k + 1) % Length;
		  }
		  if(Array[k] == i) {  // 更新MaxNumber
			  if(MaxNumber <= i) {
				  MaxNumber = i;
			  }
		  }
	  }
	  System.out.println(MaxNumber);
	}
	public static int GetNumnberLength(int number) {
		int len = 0;
		while(number > 0) {
			len ++;
			number = number / 10;
		}
		return len;
	}
	public static void NumbertoArray(int array[], int number) {
		for(int i = array.length - 1; i >= 0; i --) {
			array[i] = number % 10;
			number = number / 10;
		}
	}
	public static int ListNumberSum(int array[]) {
		int sum = 0;
		for(int i = 0; i < array.length; i ++) sum = sum + array[i];
		return sum;
	}
}

试题C:分布式队列

思想就是简化成了一维数组,每个数组下标对应相应结点,数组对应值为同步的数的数量,只需关注最小的那个结点即可 

 

import java.util.*;

public class Main {
	 
	public static void main(String[] args) {
	  Scanner sc = new Scanner(System.in);
	  int Number = sc.nextInt();  // 输入
	  String Temp = sc.nextLine();  // 吃空格
	  int Array[] = new int [Number];
	    while(sc.hasNext()){
		  String Command = sc.nextLine();
		  if(Command.charAt(0) == 'a') { 
			  Array[0] ++;  // add命令  
		  }else if(Command.charAt(0) == 'q') {
			  System.out.println(GetArrayMinNumber(Array));
		  }else {
			  String Split[] = Command.split("\\s+");
			  int Index =  Integer.parseInt(Split[1]);
			  if(Array[Index] < Array[0]) Array[Index] ++;  // 主节点还有多的元素才能同步
		  }
	    }
	}
	public static int GetArrayMinNumber(int array[]) {
		int MinOne = Integer.MAX_VALUE;
		for(int i = 0; i < array.length; i ++) {
			if(MinOne >= array[i]) MinOne = array[i];
		}
		return MinOne;
	}
}

试题D:食堂

这道题写的太烂了就不po了 

试题E:最优分组

import java.util.*;

public class Main {
	 
	public static void main(String[] args) {
	  Scanner sc = new Scanner(System.in);
	  int Number = sc.nextInt();
	  double P = sc.nextDouble();
	  double MinHope = Number;
	  int Index = 1;
	  for(int k = 1; k <= Number; k ++) {
		 if(Number % k == 0) { 
			 double GetHope = Number * (1 - Math.pow(1 - P, k)) + Number / k;
			 if(GetHope < MinHope) {
				 MinHope = GetHope;
				 Index = k;
			 }
		 }
	  }
	  System.out.println(Index);
	}
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值