第七届蓝桥杯Java B组省赛答案
- 格式:docx
- 大小:22.73 KB
- 文档页数:22
第七届蓝桥杯javaB组真题解析-⽣⽇蜡烛(第⼆题)题⽬/*⽣⽇蜡烛某君从某年开始每年都举办⼀次⽣⽇party,并且每次都要吹熄与年龄相同根数的蜡烛。
现在算起来,他⼀共吹熄了236根蜡烛。
请问,他从多少岁开始过⽣⽇party的?请填写他开始过⽣⽇party的年龄数。
注意:你提交的应该是⼀个整数,不要填写任何多余的内容或说明性⽂字。
*/答案26代码1public class Main {2public static void main(String[] args) {3//从1岁开始试,到100岁截⾄4for(int i=1;i<100;i++){5boolean is=false; //判断是否得到结果,是跳出,否继续循环6int s=i,n=i; //s 从第i年开始计算⽣⽇共吹熄的蜡烛数,n每⼀年要吹熄的蜡烛数7while(true){8if(s==236){//总数等于236 则说明是从第i年开始计算的9 System.out.println(i+"-"+n);//结果输出从第i年开始到现在n年10 is = true;11break;12 }13if(s>236) //如果总数⼤于236 则说明不是从第i年开始计算的14break;15//否则继续叠加这个代码放在if前⾯也可以因为由题⽬可以看出肯定不会是只过了⼀年⽣⽇16 n++; //下⼀年要吹熄的蜡烛数17 s +=n;//继续累计吹熄的蜡烛数18 }19if(is)20break;21 }22 }23 }解析可以尽量⽤代码思想来考虑,循环试出来,⽽不⽤考虑到数学问题上去,这样会提升代码的逻辑难度,容易出错。
蓝桥杯java历年真题及答案整理(参考网络资料整理出来)1.字符排序算法是这样的,如果给定N个不同字符,将这N个字符全排列,最终的结果将会是N!种。
如:给定 A、B、C三个不同的字符,则结果为:ABC、ACB、BAC、BCA、CAB、CBA一共3!=3*2=6种情况。
package Question1_9;import java.util.Scanner;import java.util.Vector;public class Question1 {public static long count=0;private void fullPermutation(Vector<Character>sourse, Vector<Character> result) {if(sourse.size()==0){for (int i = 0; i < result.size(); i++) {System.out.print(result.elementAt(i));}System.out.print("\n");count++;return;}for (int i = 0; i < sourse.size(); i++) {Vector<Character>tsourse=new Vector<Character>(sourse);Vector<Character>tresult=new Vector<Character>(result);tresult.add(sourse.elementAt(i));tsourse.remove(i);new Question1().fullPermutation(tsourse, tresult);}}public static void main(String[] args) {Scanner scanner=new Scanner(System.in);int n=scanner.nextInt();Vector<Character> sourse=new Vector<Character>();Vector<Character> result=new Vector<Character>();for (int i = 0; i < n; i++) {sourse.add((char)('A'+i));}new Question1().fullPermutation(sourse, result);System.out.println(Question1.count);}}方法二:import java.util.ArrayList;import java.util.Iterator;import java.util.LinkedHashSet;import java.util.List;import java.util.Scanner;import java.util.Set;public class Demo03 {// 去掉重复元素,放入lispublic static void removeDuplicate(String s,Set<Character> lis){for(char x:s.toCharArray()){lis.add(x);}}// 为方便操作将sets 转lispublic static void convert(List<Character> lis,Set<Character> sets){Iterator<Character> iter = sets.iterator();while(iter.hasNext()){lis.add(iter.next());}}// 检测符合条件的元素组合public static void check(Set<Character> sets){List<Character> lis = new ArrayList<Character>();convert(lis,sets); // 为方便操作将sets 转lisStringBuffer sb = new StringBuffer();for(int i=0;i<lis.size()-2;i++){for(int j=i+1;j+1<lis.size();j++){ // 向后添加两位,所以j+1<lis.size() for(int k=j+1;k<lis.size();k++){sb.append(lis.get(i));sb.append(lis.get(j));sb.append(lis.get(k));System.out.println(sb); // 输出组合sb.setLength(0); // 清空}}}}public static void main(String[] args){Scanner scan = new Scanner(System.in);System.out.println("输入串(不大于30个字符)。
package com.diqijie.shengsai;/*** @author leibaobao* 煤球数目* 解:100层为1+2+3....+100 = 5050*/publicclass _1 {publicstaticvoid main(String[] args) { // TODO Auto-generated method stubint sum = 0;for(int i = 1; i <= 100; i++){for(int j = 1; j <= i; j++)sum += j;}System.out.println(sum);}}package com.diqijie.shengsai;/*** @author leibaobao* 生日蜡烛* 解:人最大也不过100岁,不要想太多。
暴力一点 */publicclass _2 {publicstaticvoid main(String[] args) { // TODO Auto-generated method stubint sum = 0;for(int i = 0; i < 100; i++){for(int j = i; j < 100; j++){sum += j;if(sum == 236)System.out.println(i);}sum = 0;}} }package com.diqijie.shengsai;import java.util.HashSet;/*** @author leibaobao* 凑算式* 解:前几题不要多想,暴力一点。
但是Java能不用大数不要去用大数* 麻烦,慢。
这题通分加for循环不就OK了吗*/publicclass _3 {publicstaticvoid main(String[] args) {// TODO Auto-generated method stubint count = 0;for(int a = 1; a < 10; a++)for(int b = 1; b < 10; b++)for(int c = 1; c < 10; c++)for(int d = 1; d < 10; d++)for(int e = 1; e < 10; e++)for(int f = 1; f < 10; f++)for(int g = 1; g < 10; g++)for(int h = 1; h < 10; h++)for(int i = 1; i < 10; i++){if(a!=b&&a!=c&&a!=d&&a!=e&&a!=f&&a!=g&&a!=h&&a!=i&&b!=c&&b!=d&&b!=e&&b!=f&&b!=g&&b!=h&&b!=i&&c!=d&&c!=e&&c!=f&&c!=g&&c!=h&&c!=i&&d!=e&&d!=f&&d!=g&&d!=h&&d!=i&&e!=f&&e!=g&&e!=h&&e!=i&&f!=g&&f!=h&&f!=i&&g!=h&&g!=i&&i!=h){int temp_1 = b*(g*100 +h*10 +i);int temp_2 = c*(d*100+e*10+f);int temp_3 = c*(g*100 +h*10 +i);if((temp_1+temp_2)%temp_3 == 0)if(a + (temp_1+temp_2)/temp_3 == 10){count++;}}}System.out.println(count);}}package com.diqijie.shengsai;/*** @author leibaobao 分小组解:这个读懂即可*/publicclass _4 {publicstatic String remain(int[] a) {String s = "";for (int i = 0; i < a.length; i++) {if (a[i] == 0)s += (char) (i + 'A');}return s;}publicstaticvoid f(String s, int[] a) {for (int i = 0; i < a.length; i++) {if (a[i] == 1)continue;a[i] = 1;for (int j = i + 1; j < a.length; j++) {if (a[j] == 1)continue;a[j] = 1;for (int k = j + 1; k < a.length; k++) {if (a[k] == 1)continue;a[k] = 1;System.out.println(s+""+(char) (i + 'A')+ (char) (j + 'A') + (char) (k + 'A') +""+ remain(a)); // 填空位置a[k] = 0;}a[j] = 0;}a[i] = 0;}}publicstaticvoid main(String[] args) {int[] a = newint[9];a[0] = 1;for (int b = 1; b < a.length; b++) {a[b] = 1;for (int c = b + 1; c < a.length; c++) {a[c] = 1;String s = "A" + (char) (b + 'A') + (char) (c + 'A');f(s, a);a[c] = 0;}a[b] = 0;}}}/*** @author leibaobao 抽签* 解:填代码题读懂即可,dfs*/publicclass _5 {publicstaticvoid f(int[] a, int k, int n, String s) { if (k == a.length) {if (n == 0)System.out.println(s);return;}String s2 = s;for (int i = 0; i <= a[k]; i++) {f(a,k+1,5-s2.length(),s2);s2 += (char) (k + 'A');}}publicstaticvoid main(String[] args) {int[] a = { 4, 2, 2, 1, 1, 3 };f(a, 0, 5, "");}}/*** @author leibaobao 抽签* 解:填代码题读懂即可,dfs*/publicclass _5 {publicstaticvoid f(int[] a, int k, int n, String s) { if (k == a.length) {if (n == 0)System.out.println(s);return;}String s2 = s;for (int i = 0; i <= a[k]; i++) {f(a,k+1,5-s2.length(),s2);s2 += (char) (k + 'A');}}publicstaticvoid main(String[] args) {int[] a = { 4, 2, 2, 1, 1, 3 };f(a, 0, 5, "");}}package com.diqijie.shengsai;import java.util.Arrays;import java.util.HashSet;import java.util.Iterator;/*** @author leibaobao 剪邮票* 解:深搜,效率不是很高,反正是填空题*/public class _7 {public static int count = 0;public static int [] a = new int[5];public static HashSet<String> hashset = new HashSet<String>();public static void main(String[] args) {// TODO Auto-generated method stubfor(a[0] = 0; a[0] < 12; a[0]++)for(a[1] = a[0]+1; a[1] < 12; a[1]++)for(a[2] = a[1]+1; a[2] < 12; a[2]++)for(a[3] = a[2]+1; a[3] < 12; a[3]++)for(a[4] = a[3]+1; a[4] < 12; a[4]++)if(jus()){hashset.add(""+a[0]+a[1]+a[2]+a[3]+a[4]);}System.out.println(hashset.size());}private static boolean jus() {// TODO Auto-generated method stubboolean flag[] = new boolean[5];dfs(flag,0);return flag[0]&&flag[1]&&flag[2]&&flag[3]&&flag[4];}private static void dfs(boolean[] flag,int n) {// TODO Auto-generated method stubflag[n] = true;for(int i = 0; i < 5; i++){//加一减一要在同一行、加四减四要在同一列if(!flag[i] && (a[i]/4 == a[n]/4) && (a[i] == a[n] - 1 || a[i] == a[n] + 1)){dfs(flag,i);}if (!flag[i] && (a[i]%4 == a[n]%4) && (a[i] == a[n] - 4 || a[i] == a[n] + 4)){dfs(flag,i);}}}}package com.diqijie.shengsai;import java.util.Scanner;/*** @author leibaobao* 四平方和* 解:哎,这题我超级无语。
蓝桥杯java模拟赛试题及答案蓝桥杯Java模拟赛试题及答案一、选择题(每题2分,共20分)1. Java中,下列哪个关键字用于定义类?A. classB. interfaceC. enumD. struct答案:A2. 在Java中,哪个关键字用于定义一个方法?A. functionB. methodC. procedureD. action答案:B3. 下列哪个是Java中的合法标识符?A. 2variableB. variable2C. variable#2D. variable!答案:B4. Java中,哪个关键字用于实现接口?A. implementsB. extendsC. includesD. contains答案:A5. 在Java中,哪个关键字用于定义一个包?A. packageB. groupC. bundleD. container答案:A6. Java中,下列哪个是正确的数组声明方式?A. int[] array;B. array int[];C. int array[];D. array[] int;答案:A7. 在Java中,哪个关键字用于定义一个构造方法?A. constructorB. initializerC. setupD. method答案:D8. Java中,哪个关键字用于实现多态?A. overrideB. extendsC. implementsD. abstract答案:A9. 下列哪个是Java中的引用数据类型?A. intB. charC. StringD. boolean答案:C10. 在Java中,哪个关键字用于抛出异常?A. throwB. throwsC. exceptionD. error答案:B二、简答题(每题10分,共20分)1. 简述Java中异常处理的机制。
答案:Java中的异常处理机制主要通过try、catch、finally和throw关键字来实现。
java算法第七届蓝桥杯B组(题+答案)9.取球博弈9.取球博弈 (程序设计)两个⼈玩取球的游戏。
⼀共有N个球,每⼈轮流取球,每次可取集合{n1,n2,n3}中的任何⼀个数⽬。
如果⽆法继续取球,则游戏结束。
此时,持有奇数个球的⼀⽅获胜。
如果两⼈都是奇数,则为平局。
假设双⽅都采⽤最聪明的取法,第⼀个取球的⼈⼀定能赢吗?试编程解决这个问题。
输⼊格式:第⼀⾏3个正整数n1 n2 n3,空格分开,表⽰每次可取的数⽬ (0<n1,n2,n3<100)第⼆⾏5个正整数x1 x2 ... x5,空格分开,表⽰5局的初始球数(0<xi<1000)输出格式:⼀⾏5个字符,空格分开。
分别表⽰每局先取球的⼈能否获胜。
能获胜则输出+,次之,如有办法逼平对⼿,输出0,⽆论如何都会输,则输出-例如,输⼊:1 2 31 2 3 4 5程序应该输出:+ 0 + 0 -再例如,输⼊:1 4 510 11 12 13 15程序应该输出:0 - 0 + +再例如,输⼊:2 3 57 8 9 10 11程序应该输出:+ 0 0 0 0资源约定:峰值内存消耗(含虚拟机) < 256MCPU消耗 < 3000ms1 import java.util.Scanner;23 public class _9取球博弈 {4 public static int [] n = new int[3];5 public static int [] init = new int[5];6 public static int [] end = new int[1000];7 public static char [] sign = {'-','0','0','+'};8 public static void main(String [] args){9 Scanner scan = new Scanner(System.in);10 for(int i = 0; i < 3; i++){11 n[i] = scan.nextInt();12 }13 int Min = Math.min(n[0], Math.min(n[1], n[2]));14 for(int i = 0; i < 5; i++){15 init[i] = scan.nextInt();16 }17 for(int i = 0; i < Min; i++){18 end[i] = 2;19 }20 for(int i = Min; i < end.length; i++){21 int temp = 0;22 for(int j =0; j < 3; j++){23 if(i - n[j] < 0)24 continue;25 else if(end[i-n[j]] == 3){26 if(n[j]%2 != 0)27 temp = 1 > temp ? 1 : temp;28 }29 else if(end[i-n[j]] == 0){30 if(n[j]%2 == 0)31 temp = 3;32 else33 temp = 2 > temp ? 2 : temp;34 }35 else if(end[i-n[j]] == 2){36 if(n[j]%2==0)37 temp = 2 > temp ? 2 : temp;38 else39 temp = 3;40 }41 else if(end[i-n[j]] == 1){42 if(n[j]%2==0)43 temp = 1 > temp ? 1 : temp;44 }45 }46 end[i] = temp;47 }48 for(int i = 0; i < 5; i++){49 System.out.print(sign[end[init[i]]]+" ");50 }51 }52 }(参考⽹上的,没有思路0.0)。
算法训练编号:ALGO-1题目:区间k大数查询列关键字:排序查找类型:普通试题问题描述给定一个序列,每次询问序列中第l个数到第r个数中第K大的数是哪个。
输入格式第一行包含一个数n,表示序列长度。
第二行包含n个正整数,表示给定的序列。
第三个包含一个正整数m,表示询问个数。
接下来m行,每行三个数l,r,K,表示询问序列从左往右第l个数到第r个数中,从大往小第K大的数是哪个。
序列元素从1开始标号。
输出格式总共输出m行,每行一个数,表示询问的答案。
样例输入51 2 3 4 521 5 22 3 2样例输出42数据规模与约定对于30%的数据,n,m<=100;对于100%的数据,n,m<=1000;保证k<=(r-l+1),序列中的数<=1000000。
本题的Java参考代码如下:import java.io.BufferedInputStream;import java.io.IOException;import java.util.Arrays;public class Main{private static BufferedInputStream in = new BufferedInputStream(System.in);public static void main(String[] args) throws IOException{int[] nums = new int[readInt()];for(int i=0; i<nums.length; i++){nums[i] = readInt();}for(int i=readInt(); i>0; i--){int a = readInt();int b = readInt();int c = readInt();int[] tn = new int[b-a+1];for(int j=0; j<tn.length; j++){tn[j] = nums[a-1+j];}Arrays.sort(tn);System.out.println(tn[tn.length-c]);}}private static int readInt() throws IOException{int i,sum=0;while(((i=in.read())&48) != 48 || i>57);for(;(i&56) == 48 || (i&62) == 56; i=in.read())sum = sum*10 + (i&15);return sum;}}编号:ALGO-2题目:最大最小公倍数关键字:贪心类型:普通试题问题描述已知一个正整数N,问从1~N中任选出三个数,他们的最小公倍数最大可以为多少。
蓝桥杯试题及答案一、选择题1. 在Java中,以下哪个关键字用于定义类?A. classB. interfaceC. enumD. struct答案:A2. 下列哪个不是Python的内置数据类型?A. intB. floatC. stringD. list答案:D二、填空题1. 在C语言中,定义一个整型变量的关键字是________。
答案:int2. 在JavaScript中,用于定义函数的关键字是________。
答案:function三、简答题1. 请简述什么是算法的时间复杂度,并给出一个例子。
答案:算法的时间复杂度是指算法执行时间随输入规模增长的变化趋势。
例如,对于一个简单的线性搜索算法,如果数组中有n个元素,最坏情况下需要比较n次,因此其时间复杂度是O(n)。
2. 请解释什么是栈,并给出一个栈的应用场景。
答案:栈是一种后进先出(LIFO)的数据结构,允许在一端进行数据的添加和删除操作。
一个常见的栈的应用场景是函数调用的实现,在编程中,每当调用一个函数,就会将函数的返回地址和局部变量压入栈中,待函数执行完毕后再从栈中弹出。
四、编程题1. 编写一个函数,实现对一个整数数组进行排序。
答案:```javapublic static void sort(int[] array) {for (int i = 0; i < array.length - 1; i++) {for (int j = 0; j < array.length - i - 1; j++) {if (array[j] > array[j + 1]) {int temp = array[j];array[j] = array[j + 1];array[j + 1] = temp;}}}}```2. 编写一个程序,实现计算一个字符串中所有元音字母的数量。
答案:```pythondef count_vowels(s):vowels = "aeiouAEIOU"return sum(1 for char in s if char in vowels)# 示例print(count_vowels("Hello World")) # 输出应该是 3```五、案例分析题1. 描述一个场景,其中使用二叉搜索树(BST)比使用数组更有效,并解释原因。
蓝桥杯本科java试题及答案蓝桥杯本科Java试题及答案一、选择题(每题2分,共10分)1. 在Java中,以下哪个关键字用于定义类?A. classB. functionC. interfaceD. struct答案:A2. 下列哪个是Java中的合法标识符?A. 2classB. class@2C. _classD. class-class答案:C3. Java中的哪个类提供了一种计算时间和日期的方法?A. DateB. TimeC. CalendarD. Clock答案:C4. 在Java中,以下哪个是正确的条件表达式?A. if (x = 5)B. if (x == 5)C. if (x : 5)D. if (x / 5)答案:B5. Java中的异常处理机制是通过哪两个关键字实现的?A. try-catchB. if-elseC. switch-caseD. for-loop答案:A二、填空题(每题3分,共15分)1. Java中的所有类都是继承自ng.________类。
答案:Object2. 在Java中,________关键字用于实现方法的多态。
答案:override3. Java中的集合框架主要分为两大类:________和________。
答案:List、Set4. Java中的线程同步机制是通过________关键字实现的。
答案:synchronized5. Java中,要实现网络通信,可以使用________类。
答案:Socket三、简答题(共20分)1. 请简述Java中接口和抽象类的区别。
(10分)答案:接口定义了一组可供实现的抽象方法,它不包含任何实现细节,一个类可以实现多个接口。
抽象类可以包含抽象方法和具体方法,它提供了一个通用的模板,一个类只能继承一个抽象类。
接口主要用于定义一个或多个类必须遵守的规则,而抽象类则更侧重于代码的共享和重用。
2. 请解释Java中垃圾回收机制的作用及其工作原理。
第七届蓝桥杯省赛a组试题及答案第七届蓝桥杯省赛A组试题及答案1. 选择题- 1.1 以下哪个选项是Java中的数据类型?A. BooleanB. StringC. IntegerD. All of the above- 答案:D- 1.2 在C++中,用于定义一个类的方法是什么关键字?A. classB. structC. functionD. method- 答案:A2. 填空题- 2.1 在Python中,用于定义函数的关键字是____。
- 答案:def- 2.2 在JavaScript中,用于声明变量的关键字是____。
- 答案:var3. 编程题- 3.1 编写一个函数,计算并返回从1到n的整数之和。
- 答案:```pythondef sum_n(n):return sum(range(1, n+1))```- 3.2 编写一个程序,实现一个简单的计算器,可以进行加、减、乘、除操作。
- 答案:```pythondef calculator(a, b, operation):if operation == '+':return a + belif operation == '-':return a - belif operation == '*':return a * belif operation == '/':return a / b if b != 0 else 'Error: Division by zero'```4. 简答题- 4.1 解释什么是面向对象编程(OOP)?- 答案:面向对象编程(OOP)是一种编程范式,它使用“对象”来设计应用程序和程序。
对象是现实世界中事物的抽象,它们具有属性(数据)和方法(功能)。
- 4.2 描述一下什么是递归函数?- 答案:递归函数是一个调用自身的函数,它允许函数在执行过程中调用自己。
java蓝桥杯b组题目(实用版)目录1.Java 蓝桥杯 B 组题目概述2.Java 蓝桥杯 B 组题目的考试形式和要求3.Java 蓝桥杯 B 组题目的备考策略4.总结正文【Java 蓝桥杯 B 组题目概述】Java 蓝桥杯是我国高校计算机类专业的一项重要赛事,旨在发现和培养优秀的计算机人才。
其中,B 组题目是针对本科生举办的比赛,其内容涵盖了 Java 语言的基本语法、数据结构与算法、操作系统等方面的知识。
参加 Java 蓝桥杯 B 组比赛不仅能够提升自己的编程技能,还可以与其他优秀的计算机专业学生进行交流,拓宽视野。
【Java 蓝桥杯 B 组题目的考试形式和要求】Java 蓝桥杯 B 组题目的考试形式为在线编程,参赛选手需要在规定的时间内(通常为 4 小时)完成若干道题目。
这些题目通常包括程序设计题、算法题、调试题等,要求参赛选手具备扎实的 Java 编程基础和较强的逻辑思维能力。
【Java 蓝桥杯 B 组题目的备考策略】1.扎实掌握 Java 基础知识。
包括 Java 基本语法、面向对象编程、异常处理、集合框架等,这些知识点是解决 Java 蓝桥杯 B 组题目的基础。
2.学习数据结构与算法。
数据结构与算法是计算机专业的核心知识,对于解决编程题目具有重要意义。
可以学习常见的数据结构(如数组、链表、树、图等)和算法(如排序、查找、动态规划等),并熟练掌握常用的算法思想和方法。
3.多做练习,积累经验。
参加在线编程练习平台,如 LeetCode、牛客网等,可以提高自己的编程能力和应对题目的技巧。
同时,多参加模拟赛,了解自己在考试环境下的应对能力,为正式比赛做好充分的准备。
4.分析总结,查漏补缺。
在练习过程中,要注重总结自己遇到的问题和不足,查找资料和学习他人的解题方法,不断提高自己的编程水平。
【总结】Java 蓝桥杯 B 组题目对于计算机专业的学生来说是一个很好的锻炼和学习机会。
要想在比赛中取得好成绩,需要扎实掌握 Java 基础知识,学习数据结构与算法,多进行练习和总结。