第七届蓝桥杯Java B组省赛答案
第七届蓝桥杯javaB组真题解析-生日蜡烛(第二题)
第七届蓝桥杯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历年真题及答案整理(共129道题目及答案)
蓝桥杯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个字符)。
第七届蓝桥杯Java B组省赛答案
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模拟赛试题及答案蓝桥杯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.取球博弈
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)。
蓝桥杯练习系统算法训练习题加答案java版本
算法训练编号: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试题及答案蓝桥杯本科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组试题及答案第七届蓝桥杯省赛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组题目
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 基础知识,学习数据结构与算法,多进行练习和总结。
java算法第七届蓝桥杯B组(题+答案)7.剪邮票
java算法第七届蓝桥杯B组(题+答案)7.剪邮票7.剪邮票 (结果填空)如【图1.jpg】, 有12张连在⼀起的12⽣肖的邮票。
现在你要从中剪下5张来,要求必须是连着的。
(仅仅连接⼀个⾓不算相连)⽐如,【图2.jpg】,【图3.jpg】中,粉红⾊所⽰部分就是合格的剪取。
请你计算,⼀共有多少种不同的剪取⽅法。
请填写表⽰⽅案数⽬的整数。
注意:你提交的应该是⼀个整数,不要填写任何多余的内容或说明性⽂字。
思路:感觉还是先排列,从12个邮票中选5个出来,然后对每个邮票搜索,同⼀⾏,同⼀列,则表⽰连接到,如果连接到就定义该块邮票被访问过,最后判断5个邮票是否都被访问过,是就说明是连通的,但是这个不是全排列,应该是从12个选5个出来从12个选5个。
判断5个是否相连,符合⼀个visit设为true,五个true,count++(这个题没弄懂,参考⽹上的)1 public class _7剪邮票 {2 static int a[] = new int[5];3 public static void main(String[] args) {4 int count = 0;5 for (a[0] = 0; a[0] < 12; a[0]++) {6 for (a[1] = a[0] + 1; a[1] < 12; a[1]++) {7 for (a[2] = a[1] +1 ; a[2] < 12; a[2]++) {8 for (a[3] = a[2]+1; a[3] < 12; a[3]++) {9 for (a[4] = a[3]+1; a[4] < 12; a[4]++) {10 if (judge()) {11 count++;12 }13 }14 }15 }16 }17 }18 System.out.println(count);19 }20 private static boolean judge() {21 boolean visit[] = new boolean[5];22 dfs(visit,0);23 return visit[0]&&visit[1]&&visit[2]&&visit[3]&&visit[4];24 }2526 private static void dfs(boolean[] visit, int i) {27 visit[i] = true;28 for (int j = 0; j < visit.length; j++) {29 if (!visit[j]&&(a[i]/4==a[j]/4)&&(a[i]==a[j]+1||a[i]==a[j]-1)) {30 dfs(visit, j);31 }32 if (!visit[j]&&(a[i]==a[j]+4||a[i]==a[j]-4)) {33 dfs(visit, j);34 }35 }36 }37 }运⾏结果:116。
蓝桥杯java试题及答案
蓝桥杯java试题及答案蓝桥杯是中国著名的计算机科学与技术竞赛,旨在选拔和培养优秀的计算机人才,尤其是高中和大学的学生。
Java是蓝桥杯竞赛中常见的编程语言之一。
本文将介绍一些常见的蓝桥杯Java试题,并提供相应的答案。
一、编程题1. 题目描述:请编写一个Java程序,实现将一个整数数组中的奇数和偶数分别放在两个新数组中,并按照从小到大的顺序排列。
解题思路:可以使用两个ArrayList来保存奇数和偶数,先遍历原数组,将奇数放入奇数数组,将偶数放入偶数数组,然后分别对两个数组进行升序排序。
代码实现:```javaimport java.util.ArrayList;import java.util.Arrays;import java.util.Collections;public class SplitArray {public static void main(String[] args) {int[] arr = {1, 2, 3, 4, 5, 6};ArrayList<Integer> oddList = new ArrayList<>(); ArrayList<Integer> evenList = new ArrayList<>(); for (int num : arr) {if (num % 2 == 0) {evenList.add(num);} else {oddList.add(num);}}Collections.sort(oddList);Collections.sort(evenList);System.out.println("奇数数组:" + oddList);System.out.println("偶数数组:" + evenList);}}```答案分析:该程序首先定义了一个整型数组 `arr`,然后创建两个ArrayList:`oddList`用于保存奇数,`evenList`用于保存偶数。
蓝桥杯javab组模拟题
蓝桥杯javab组模拟题一、介绍1.1 蓝桥杯蓝桥杯是中国著名的计算机竞赛之一,分为初赛和决赛两个阶段,每年吸引了成千上万的中学生和大学生参与。
其中,javab组是蓝桥杯的一个比赛项目,要求参赛者使用Java语言来完成编程任务。
1.2 模拟题为了帮助参赛者更好地准备蓝桥杯javab组的比赛,官方通常会提供一些模拟题供参赛者练习和熟悉比赛的题型和要求。
本文将围绕蓝桥杯javab组模拟题展开讨论,探讨如何有效地完成模拟题。
二、理解题目2.1 题目要求在解答任何一道题目之前,首先要对题目进行仔细地阅读和理解。
这可以帮助我们明确题目的要求和限制条件,从而更好地规划解题思路。
2.2 分析输入输出在理解题目的同时,我们还需要对输入和输出进行分析。
通常,题目会明确给出输入格式和输出格式,我们需要将其转化为具体的数据结构或代码逻辑。
2.3 确定解题思路理解题目和分析输入输出后,我们可以根据题目要求和限制条件确定解题思路。
这可能涉及到算法选择、数据结构设计等方面的判断。
三、解题步骤3.1 输入处理在开始编写程序之前,我们需要先进行输入处理。
这包括获取用户输入的数据、对输入进行格式化和校验等步骤。
3.2 算法实现一旦输入处理完成,我们可以着手编写算法来解决问题。
这可能涉及到递归、动态规划、图算法等各种算法思想。
3.3 输出结果当算法实现完成后,我们需要将结果输出。
这可能需要对结果进行格式化和排序等操作,以满足题目的要求。
3.4 程序测试最后,我们需要对程序进行测试,以确保它能够正确地处理各种输入情况。
这包括正常输入、边界输入以及异常输入等情况。
四、解题技巧4.1 知识储备在解题过程中,我们需要运用一些基本的编程知识。
这包括数据类型、运算符、控制流语句等基本概念。
4.2 算法思想解题过程中,合理选择和运用算法思想是至关重要的。
我们可以借鉴已有的经典算法,也可以根据题目特点进行创新。
4.3 优化策略除了正确性以外,我们还可以考虑优化策略。
第七届蓝桥杯省赛B组试题
(1)煤球数目有一堆煤球,堆成三角棱锥形。
具体:第一层放1个,第二层3个(排列成三角形),第三层6个(排列成三角形),第四层10个(排列成三角形),....如果一共有100层,共有多少个煤球?题解:纯粹的数学题而已int a[101] ={0};for(int i = 1 ; i < 101 ; i ++)a[i] = a[i-1] + i;intans = 0;for(int j = 1 ; j < 101 ; j ++)ans += a[j];printf("%d\n",ans);(2)生日蜡烛某君从某年开始每年都举办一次生日party,并且每次都要吹熄与年龄相同根数的蜡烛。
现在算起来,他一共吹熄了236根蜡烛。
请问,他从多少岁开始过生日party的?请填写他开始过生日party的年龄数。
题解:暴力枚举。
第一重循环枚举刚开始过生日时候的岁数。
第二重循环是枚举现在的岁数第三重循环就是将刚开始过生日的岁数和现在的岁数加起来。
intstart,end;for(start = 1 ; start < 236 ; start ++){for( end = start ; end < 236 ; end ++ ){int sum = 0;for(int i = start; i <= end; i ++)sum += i;if( sum == 236)printf("start : %d end : %d\n",start,end);}}B DEFA + — + —— = 10C GHI(如果显示有问题,可以参见【图1.jpg】)这个算式中A~I代表1~9的数字,不同的字母代表不同的数字。
比如:6+8/3+952/714 就是一种解法,5+3/1+972/486 是另一种解法。
这个算式一共有多少种解法?//29题解:DFS+回溯由于计算机中5/2会等于2,而且如果打算采用精度方面的处理的话,会很麻烦,而且很容易错。
蓝桥杯java连通问题试题及答案
蓝桥杯java连通问题试题及答案BMP是常见的图像存储格式。
如果⽤来存⿊⽩图像(颜⾊深度=1),则其信息⽐较容易读取。
与之相关的数据:(以下偏移均是从⽂件头开始)偏移:10字节, 长度4字节:图像数据真正开始的位置。
偏移:18字节, 长度4字节:位图的宽度,单位是像素。
偏移:22字节, 长度4字节:位图的⾼度,单位是像素。
从图像数据开始处,每个像素⽤1个⼆进制位表⽰。
从图⽚的底⾏开始,⼀⾏⼀⾏向上存储。
Windows规定图像⽂件中⼀个扫描⾏所占的字节数必须是4字节的倍数,不⾜的位均以 0 填充。
例如,图⽚宽度为45像素,实际上每⾏会占⽤8个字节。
可以通过Windows⾃带的画图⼯具⽣成和编辑⼆进制图像。
需要在“属性”中选择“⿊⽩”,指定为⼆值图像。
可能需要通过查看 | 缩放 | ⾃定义... 把图像变⼤⽐例⼀些,更易于操作。
图像的左下⾓为图像数据的开始位置。
⽩⾊对应1,⿊⾊对应0我们可以定义:两个点距离如果⼩于2个像素,则认为这两个点连通。
也就是说:以⼀个点为中⼼的九宫格中,围绕它的8个点与它都是连通的。
如:t1.bmp 所⽰,左下⾓的点组成⼀个连通的群体;⽽右上⾓的点都是孤⽴的。
程序的⽬标是:根据给定的⿊⽩位图,分析出所有独⽴连通的群体,输出每个连通群体的⾯积。
所谓⾯积,就是它含有的像素的个数。
输⼊数据固定存在in.bmp中。
如⽰例的in.bmp,程序应该输出:128152133该输出表⽰:共有4个连通群体。
输出的连通体⾯积间的顺序可以随意。
请编程解决上述问题。
我们测试程序的时候,会使⽤不同的in.bmp⽂件。
要求考⽣把所有类写在⼀个⽂件中。
调试好后,存⼊与考⽣⽂件夹下对应题号的“解答.txt”中即可。
相关的⼯程⽂件不要拷⼊。
请不要使⽤package语句。
另外,源程序中只能出现JDK1.5中允许的语法或调⽤。
不能使⽤1.6或更⾼版本。
答案import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;import java.util.ArrayList;import javax.imageio.ImageIO;public class Node {public static nodes[][] ns = null;public static int width, height;public static int result = 0;public static void f(int x, int y) {if (x < 0 || x >= width || y < 0 || y >= height)return;if (!ns[x][y].visited) {ns[x][y].visited = true;if (ns[x][y].value) {result++;f(x - 1, y);f(x - 1, y - 1);f(x - 1, y + 1);f(x + 1, y);f(x + 1, y - 1);f(x + 1, y + 1);f(x, y - 1);f(x, y + 1);}}}public static void main(String[] args) throws IOException { // TODO Auto-generated method stubFile file = new File("in.bmp");BufferedImage bi = ImageIO.read(file);width = bi.getWidth();height = bi.getHeight();ns = new nodes[width][height];for (int x = 0; x < width; x++) {for (int y = 0; y < height; y++) {ns[x][y] = new nodes();if (bi.getRGB(x, y) == -1) {ns[x][y].value = false;} else {ns[x][y].value = true;}}}// ------------jisuanfor (int i = 0; i < width; i++)for (int j = 0; j < height; j++) {result = 0;f(i, j);if (result == 0)continue;elseSystem.out.println(result);}}}class nodes {public boolean visited = false; public boolean value = false; }。
第七届蓝桥杯CCB组题解
第一题煤球数目有一堆煤球;堆成三角棱锥形..具体:第一层放1个;第二层3个排列成三角形;第三层6个排列成三角形;第四层10个排列成三角形;....如果一共有100层;共有多少个煤球请填表示煤球总数目的数字..注意:你提交的应该是一个整数;不要填写任何多余的内容或说明性文字..这道题坑死了;第一次看堆成三角棱锥形;草稿本画半天都没画出个三角棱锥..后来单独看每句话才知道每层一个三角形叠起来就是三角棱锥..我去..看懂题目这个题目就很简单了;每层的个数是上层的个数加上层数;意思就是An = An-1 + n;然而题目是求的前100层一共多少煤球..所以是Sn.代码双重for循环就出来了..答案是:1717001.include<stdio.h>2.int main3.{4.int a101 ={0};5.for int i = 1 ; i < 101 ; i ++6. ai = ai-1 + i;7.int ans = 0;8.for int j = 1 ; j < 101 ; j ++9. ans += aj;10. printf"%d\n";ans;11.return 0;12.}第二题:生日蜡烛某君从某年开始每年都举办一次生日party;并且每次都要吹熄与年龄相同根数的蜡烛..现在算起来;他一共吹熄了236根蜡烛..请问;他从多少岁开始过生日party的请填写他开始过生日party的年龄数..注意:你提交的应该是一个整数;不要填写任何多余的内容或说明性文字..呵呵;水题;但是出题人不严谨啊怎么就不能考虑万一他今年236岁呢....好了不说了强迫症犯了..蓝桥杯这种不像acm的题目的;能暴力直接暴力..不用想太多..直接从1~236 枚举 start; end 分别表示他开始过生日的年龄和今年的年龄;然后计算之间吹蜡烛的总和如果等于236就输出start ;end. 答案是:261.include<stdio.h>2.int main3.{4.int start;end;5.for start = 1 ; start < 236 ; start ++6. {7.for end = start ; end < 236 ; end ++8. {9.int sum = 0;10.for int i = start; i <= end; i ++11. sum += i;12.if sum == 23613. {14. printf"start : %dend : %d\n";start;end;15. }16. }17. }18.return 0;19.}第三题:凑算式B DEFA + — + -——— = 10C GHI如果显示有问题;可以参见图1.jpg这个算式中A~I代表1~9的数字;不同的字母代表不同的数字..比如:6+8/3+952/714 就是一种解法;5+3/1+972/486 是另一种解法..这个算式一共有多少种解法注意:你提交应该是个整数;不要填写任何多余的内容或说明性文字..这个题不多说了;直接暴力生成9的全排列然后去验证等式是否成立;只是验证的时候如果防止精度问题可以通分把除法变成乘法..答案是:291.include<stdio.h>2.int ans = 0;3.int num10;4.bool visit10;5.6.void Solve7.{8.double sum = num0 + double num1 / num2 + double num3100+num410+num5/num6100+num710+num8;9.if sum == 1010. {11. ans ++;12. }13.}14.15.void dfs int index16.{17.if index == 918. {19. Solve;20.return ;21. }22.for int i = 1 ; i < 10 ; i ++23. {24.if visiti25. {26. visiti = true;27. numindex = i;28. dfsindex+1;29. visiti = false;30. }31. }32.}33.34.int main35.{36. dfs0;37. printf"%d\n";ans;38.return 0;39.}第四题:快速排序排序在各种场合经常被用到..快速排序是十分常用的高效率的算法..其思想是:先选一个“标尺”;用它把整个队列过一遍筛子;以保证:其左边的元素都不大于它;其右边的元素都不小于它..这样;排序问题就被分割为两个子区间..再分别对子区间排序就可以了..下面的代码是一种实现;请分析并填写划线部分缺少的代码.. include <stdio.h>void swapint a; int i; int j{int t = ai;ai = aj;aj = t;}int partitionint a; int p; int r{int i = p;int j = r + 1;int x = ap;whilei<r && a++i<x;whilea--j>x;ifi>=j break;swapa;i;j;}______________________;return j;}void quicksortint a; int p; int r {ifp<r{int q = partitiona;p;r; quicksorta;p;q-1;quicksorta;q+1;r;}}{int i;int a = {5;13;6;24;2;8;19;27;6;12;1;17};int N = 12;quicksorta; 0; N-1;fori=0; i<N; i++ printf"%d "; ai;printf"\n";return 0;}注意:只填写缺少的内容;不要书写任何题面已有代码或说明性文字..这个题目如果接触过快排;了解过快速排序的原理的应该是送分题目;只不过快排单步就是将一堆数按照某个数作为基准数分成左右两堆这个实现方式有几种代码表现..在这里答案是swapa;p;j.第五题:抽签X星球要派出一个5人组成的观察团前往W星..A国最多可以派出4人..B国最多可以派出2人..C国最多可以派出2人......那么最终派往W星的观察团会有多少种国别的不同组合呢下面的程序解决了这个问题..数组a 中既是每个国家可以派出的最多的名额..程序执行结果为:DEFFFCEFFFCDFFFCDEFFCCFFFCCEFFCCDFFCCDEFBDFFFBDEFFBCFFFBCEFFBCDFFBCDEF....以下省略;总共101行include <stdio.h>define N 6define M 5define BUF 1024void fint a; int k; int m; char b {int i;j;ifk==N{ifm==0 printf"%s\n";b;return;}fori=0; i<=ak; i++{forj=0; j<i; j++ bM-m+j = k+'A';______________________; //填空位置}}int main{int aN = {4;2;2;1;1;3};char bBUF;fa;0;M;b;return 0;}仔细阅读代码;填写划线部分缺少的内容..注意:不要填写任何已有内容或说明性文字..这个题目是这样的;对于fint a;int k;int m;char b.a 是每个国家的最多指派人数;k表示当前是哪个国家;m表示还需要派送几个人可以为负数.b表示已经派送的人的字符串..所以这个题目在递归中间的的第一个循环表示从0~ai中让i国选择指派人数;内循环只是向b记录的过程..所以答案是fa;k+1;m-i;b. 因为这里I = j .应该 fa;k+1;m-j;b 也可以..第六题:方格填数如下的10个格子如果显示有问题;也可以参看图1.jpg填入0~9的数字..要求:连续的两个数字不能相邻..左右、上下、对角都算相邻一共有多少种可能的填数方案请填写表示方案数目的整数..注意:你提交的应该是一个整数;不要填写任何多余的内容或说明性文字..这个题目题目有点表述不明;不知道0~9 可不可以重复使用..我当时做的时候是当作不可以重复使用来处理的..那么这里我就先当作不可重复使用来讲解..这里题目还是一样先往里面填数..用生成排列的形式..填写完了之后再判断是否可行..答案是:15801.include <stdio.h>2.include <math.h>3.int flag34; //表示哪些可以填数4.int mpt34; //填数5.bool visit10;6.int ans = 0;7.void init //初始化8.{9.int i;j;10.for i = 0 ; i < 3 ; i ++11.for j = 0 ; j < 4 ; j ++12. flagij = 1;13. flag00 = 0;14. flag23 = 0;15.}16.17.void Solve18.{19.int dir82 ={ 0;1;0;-1;1;0;-1;0;1;1;1;-1;-1;1;-1;-1};20.int book = true;21.for int i = 0 ; i < 3 ; i ++22. {23.for int j = 0 ; j < 4; j ++24. {25.//判断每个数周围是否满足26.if flagij == 0continue;27.for int k = 0 ; k < 8 ; k ++28. {29.int x;y;30. x = i + dirk0;31. y = j + dirk1;32.if x < 0 || x >= 3 || y < 0 || y >= 4 || flagxy == 0 continue;33.if absmptxy - mptij == 1 book = false;34. }35. }36. }37.if book ans ++;38.}39.40.41.void dfs int index42.{43.int x;y;44. x = index / 4;45. y = index % 4;46.if x == 347. {48. Solve;49.return;50. }51.if flagxy52. {53.for int i = 0 ; i < 10 ; i ++54. {55.if visiti56. {57. visiti = true;58. mptxy = i;59. dfsindex+1;60. visiti = false;61. }62. }63. }64.else65. {66. dfsindex+1;67. }68.}69.int main70.{71. init;72. dfs0;73. printf"%d\n";ans;74.return 0;75.}第七题:剪邮票如图1; 有12张连在一起的12生肖的邮票..现在你要从中剪下5张来;要求必须是连着的..仅仅连接一个角不算相连比如;图2;图3中;粉红色所示部分就是合格的剪取..请你计算;一共有多少种不同的剪取方法..请填写表示方案数目的整数..注意:你提交的应该是一个整数;不要填写任何多余的内容或说明性文字..其实这个题目还是可前面的一样;先生成;再判断是否可行..这里我们可以先用搜索从12个数里面将所有5个数的组合找出来..然后再用深搜判断这五个是否连在一起..答案是:1161.include <stdio.h>2.include <string.h>3.int mpt34;4.int mpt_visit34;5.int num6;6.int have13;7.int visit13;8.int ans = 0;9.int Count = 0;10.11.void init12.{13.int k = 1;14.for int i = 0 ; i < 3 ; i ++15.for int j = 0 ; j < 4 ; j ++16. {17. mptij = k;18. k ++;19. }20.}21.int dir42 = {0;1;0;-1;-1;0;1;0};22.//判断五个数是否能连在一起23.void dfs_find int x;int y24.{25.for int i = 0 ; i < 4 ; i++26. {27.int tx;ty;28. tx = x + diri0;29. ty = y + diri1;30.if tx < 0 || tx >= 3 || ty < 0 || ty >= 4 continue;31.if havempttxty == 0 || mpt_visittxty continue;32. mpt_visittxty = 1;33. Count ++;34. dfs_findtx;ty;35. }36.}37.38.void Solve39.{40.int i;41. memsethave;0;sizeof have;42. memsetmpt_visit;0;sizeof mpt_visit;43.for i = 1; i < 6 ; i ++ havenumi = 1;44.for i = 0 ; i < 12 ; i ++45. {46.int x;y;47. x = i / 4;48. y = i % 4;49.if havemptxy50. {51. Count = 1;52. mpt_visitxy =1;53. dfs_findx;y;54.break;55. }56. }57.if Count == 558. {59. ans ++;60. }61.}62.63.//创建5个数的组合64.void dfs_creat int index65.{66.if index == 667. {68. Solve;69.return;70. }71.for int i = numindex-1 + 1; i < 13 ; i ++72. {73.if visiti74. {75. visiti = true;76. numindex = i;77. dfs_creatindex+1;78. visiti = false;79. }80. }81.}82.83.int main84.{85. init;86. dfs_creat1;87. printf"%d\n";ans;88.return 0;89.}第八题:四平方和四平方和定理;又称为拉格朗日定理:每个正整数都可以表示为至多4个正整数的平方和..如果把0包括进去;就正好可以表示为4个数的平方和..比如:5 = 0^2 + 0^2 + 1^2 + 2^27 = 1^2 + 1^2 + 1^2 + 2^2^符号表示乘方的意思对于一个给定的正整数;可能存在多种平方和的表示法..要求你对4个数排序:0 <= a <= b <= c <= d并对所有的可能表示法按 a;b;c;d 为联合主键升序排列;最后输出第一个表示法程序输入为一个正整数N N<5000000要求输出4个非负整数;按从小到大排序;中间用空格分开例如;输入:5则程序应该输出:0 0 1 2再例如;输入:12则程序应该输出:0 2 2 2再例如;输入:773535则程序应该输出:1 1 267 838资源约定:峰值内存消耗 < 256MCPU消耗 < 3000ms请严格按要求输出;不要画蛇添足地打印类似:“请您输入...” 的多余内容..所有代码放在同一个源文件中;调试通过后;拷贝提交该源码..注意: main函数需要返回0注意: 只使用ANSI C/ANSI C++ 标准;不要调用依赖于编译环境或操作系统的特殊函数..注意: 所有依赖的函数必须明确地在源文件中 include <xxx>; 不能通过工程设置而省略常用头文件..提交时;注意选择所期望的编译器类型..这个题目很水也是搜索能做的..但是有点技巧;这里我贡献两个方法给大家参考..方法一:On^3/2.先暴力枚举前三个数然后做减法判断差是否为一个完全平方数即可..当然虽然这个题目是n^3/2看数据貌似过不了..但是貌似我找了几组数据都能秒出结果..应该是绝大多数最外层循环都不会太多..1.include <stdio.h>2.include <math.h>3.int main4.{5.int n;6.int flag = false;7. scanf"%d";&n;8.for int i = 0 ; i i <= n ; i ++9. {10.for int j = 0 ; j j <= n ; j ++{11.for int k = 0 ; k k <= n ; k ++12. {13.int temp = n - ii - jj - kk;14.double l = sqrt double temp;15.if l == int l16. {17.printf"%d %d %d %d\n";i;j;k;int l;18. flag = true;19.break;20. }21. }22.if flag break;23. }24.if flag break;25. }26.return 0;27.}方法二:On 的方法..这个方法是我在比赛的时候用的..先把两个平方数能相加的到的数字球出来然后记录..这样我们第三层循环就可以先判断再循环了..1.include <stdio.h>2.include <math.h>3.int mpt5000010 ={0}; //mpti = 1表示i 能够用两个完全平方数相加而得..4.int n;5.void init6.{7.for int i = 0 ; ii <= n ; i ++8.for int j = 0 ; jj <=n ; j ++9.if ii+jj <= n mptii+jj = 1;10.}11.int main12.{13.15. scanf"%d";&n;16. init;17.for int i = 0 ; i i <= n ; i ++18. {19.for int j = 0 ; j j <= n ; j ++{20.if mptn - ii - jj == 0 continue; //如果剩下的差用两个完全平方数不能组合出来就不继续21.for int k = 0 ; k k <= n ; k ++22. {23.int temp = n - ii - jj - kk;24.double l = sqrt double temp;25.if l == int l26. {27.printf"%d %d %d %d\n";i;j;k;int l;28. flag = true;29.break;30. }31. }32.if flag break;33. }35. }36.return 0;37.}第九题:交换瓶子有N个瓶子;编号 1 ~ N;放在架子上..比如有5个瓶子:2 13 5 4要求每次拿起2个瓶子;交换它们的位置..经过若干次后;使得瓶子的序号为:1 2 3 4 5对于这么简单的情况;显然;至少需要交换2次就可以复位..如果瓶子更多呢你可以通过编程来解决..输入格式为两行:第一行: 一个正整数NN<10000; 表示瓶子的数目第二行:N个正整数;用空格分开;表示瓶子目前的排列情况..输出数据为一行一个正整数;表示至少交换多少次;才能完成排序..例如;输入:53 1 2 5 4程序应该输出:3再例如;输入:55 4 3 2 1程序应该输出:2资源约定:峰值内存消耗 < 256MCPU消耗 < 1000ms请严格按要求输出;不要画蛇添足地打印类似:“请您输入...” 的多余内容..所有代码放在同一个源文件中;调试通过后;拷贝提交该源码..注意: main函数需要返回0注意: 只使用ANSI C/ANSI C++ 标准;不要调用依赖于编译环境或操作系统的特殊函数..注意: 所有依赖的函数必须明确地在源文件中 include <xxx>; 不能通过工程设置而省略常用头文件..提交时;注意选择所期望的编译器类型..啊啊这个题目最开始没看到最上面的那句话;以为输入的数字是随意的int.还做了离散化处理..后来看到了编号为1~n就觉得自己傻逼了..这个题目我用的贪心;从左向右如果当前第i个瓶子编号不是i就把编号为i的瓶子换过来..自己yy几发数据貌似都能过..不清楚是否对..因为这里的n规模为10000;如果在交换的时候去用for找编号为i的瓶子在哪儿时间复杂度为On^2会超时..所以这里要用两个数组;一个数组是记录第i个瓶子编号为多少;一个是记录编号为i的瓶子在哪儿..注意我们在交换的时候要把这两个数组都维护1.include <stdio.h>2.include <math.h>3.int arr10010;4.int flag10010;5.int main6.{7.int ans = 0;8.int n;i;9. scanf"%d";&n;10.for i = 1 ; i <= n ; i ++ scanf"%d";&arri;11.for i = 1 ; i <= n ; i ++ flagarri = i;12.for i = 1 ; i <= n ; i ++13. {14.if i = arri15. {16.int x = arri;17. arri ^= arrflagi ^= arri ^= arrflagi;18. flagi ^= flagx ^= flagi ^= flagx;19. ans ++;20. }21. }22. printf"%d\n";ans;23.return 0;24.}第十题:最大比例X星球的某个大奖赛设了M级奖励..每个级别的奖金是一个正整数..并且;相邻的两个级别间的比例是个固定值..也就是说:所有级别的奖金数构成了一个等比数列..比如:16;24;36;54其等比值为:3/2现在;我们随机调查了一些获奖者的奖金数..请你据此推算可能的最大的等比值..输入格式:第一行为数字N;表示接下的一行包含N个正整数第二行N个正整数XiXi<1 000 000 000 000;用空格分开..每个整数表示调查到的某人的奖金数额要求输出:一个形如A/B的分数;要求A、B互质..表示可能的最大比例系数测试数据保证了输入格式正确;并且最大比例是存在的..例如;输入:31250 200 32程序应该输出:25/4再例如;输入:43125 32 32 200程序应该输出:5/2再例如;输入:3程序应该输出:4/1资源约定:峰值内存消耗 < 256MCPU消耗 < 3000ms请严格按要求输出;不要画蛇添足地打印类似:“请您输入...” 的多余内容..所有代码放在同一个源文件中;调试通过后;拷贝提交该源码..注意: main函数需要返回0注意: 只使用ANSI C/ANSI C++ 标准;不要调用依赖于编译环境或操作系统的特殊函数..注意: 所有依赖的函数必须明确地在源文件中 include <xxx>; 不能通过工程设置而省略常用头文件..提交时;注意选择所期望的编译器类型..这个题目刚开始没准备做后来感觉时间蛮充裕的上次吃了时间的亏这次自己吧时间卡的比较死;一个小时做完了填空题;一个半小时做完了前面两道大题..所以还剩下一个半小时.想了一会儿感觉这个题可做..自己YY了一下..不保证一定正确;可以当作一个参考这个题目意思是相邻两个等级的奖金比例一定是一个相同的分数PP = A/B; A/B为最简分数.题目告诉了你n个人分别领取了多少奖金..让你算这个P最大为多少..我是这么处理的;我们先把n个人的奖金从大到小排序..剔除掉相同的相同的奖金只保留一个..然后前后做除用分数的形式保留前后两个数的比例..如何用分数表示两个数的最简分数呢..例如 A / B = A/GcdA;B / B/GcdA;B..只要把A;B最大公约数去除掉就可以了..现在得到了一堆堆分数Fsi然后怎么处理呢我们知道这些分数一定都满足一个条件就是 Fsi = P^ki 这里的ki是不定的..但是要使得求得P最大;那么一定是所有 ki 求最大公约数得到k' .结果就是 Pk'. 然而这道题数据太大了;并不容易求出这些分数对应的底数以及各自的指数..那么这个方案就不可取了..所以我们要的到结果并不能先求出k‘.但是我们看我们能不能直接求出P^k'. 这里我们先把分子分母分开处理..因为A/B是最简分数.. P^k' = A^k' / B^k'.我们先求A^k' .不知道大家还记不记得欧几里得游戏..这个游戏是这样的..黑板上有两个不同的正整数n;m..现在两个人轮流在黑板上写一个正整数要求这个正整数必须为黑板上某两个数的差并且没有在黑板上出现过..当某人无法再写下一个数的时候游戏结束..其实最后这个游戏本质就是看黑板上最多能写多少个数..事实上我们知道黑板上能写的数都是最开始两个数的最大公约数的倍数..所以黑板上最小的数也就是m;n的最大公约数..这里我们来看;假如我们先求A^k1;A^k2 指数对应的最大公约数..我们吧这个两个数做除法..发现为 A^k1-k2..发现是不是这个题目就转化为欧几里得游戏的填数游戏了..只不过加法改成了除法..所以当出发找到一个没有出现过的商的时候这些数种最小的就是当前的A^k'.然后依次对剩下的A^ki做相同操作就可以得到最终的A^ki;同样可以得到B^ki.最后输出 A^ki/B^ki即可..1.include <stdio.h>2.include <algorithm>3.include <queue>ing namespace std;5.define LL long long6.struct fs7.{8. LL up;down;9.};10.int n;11.LL arr110;12.fs Fs110;13.14.bool cmpLL a;LL b15.{16.return a > b;17.}18.19.LL GcdLL a;LL b20.{21.if b == 0 return a;22.return Gcdb;a%b;23.}24.LL GetLL a; LL b25.{26.if a < b a ^= b ^= a ^= b;27. LL v30;28. queue<LL>team;29.if a == b || a / b == a return b;30. v0 = a; v1 = b;31. v2 = a / b;32.int top = 3;i;j;33. team.pusha/b;34.while team.size35. {36. LL now = team.front;37. team.pop;38.for i = 0 ; i < top ; i ++39. {40. LL temp = vi > now vi / now : now / vi;41.bool find = false;42.for j = 0 ; j < top ; j ++43.if vj == temp find = true;44.if find == true continue;45. team.pushtemp;46. vtop++ = temp;47. }48. }49. LL ans = v0;50.for i = 0 ; i < top ; i ++51.if vi = 152. {53. ans = vi;54.break;55. }56.for i = 0 ; i < top ; i ++57.if vi < ans && vi = 1 ans = vi;58.return ans;59.}60.int main61.{62.int i;j;63. scanf"%d";&n;64.for i = 0 ; i < n ; i ++ scanf"%lld";&arri;65. sortarr;arr+n;cmp;66.int top = 1;67.for i = 1; i < n ; i ++68.if arri = arri-1 arrtop++ = arri;69. n = top;70.for i = 0 ; i < n - 1; i ++71. {72. LL gcd = Gcdarri;arri+1;73. Fsi.up = arri / gcd;74. Fsi.down = arri+1 / gcd;75. }76. LL x = Fs0.up;77.for i = 0 ; i < n - 1 ; i ++78. x = Getx;Fsi.up;79. LL y = Fs0.down;80.for i = 0 ; i < n - 1; i ++81. y = Gety;Fsi.down;82. printf"%lld/%lld\n";x;y;83.return 0;84.}。
第七届蓝桥杯程序设计大赛题目及答案
第七届省赛1. 网友年龄某君新认识一网友。
当问及年龄时,他的网友说:“我的年龄是个2 位数,我比儿子大27 岁, 如果把我的年龄的两位数字交换位置,刚好就是我儿子的年龄”请你计算:网友的年龄一共有多少种可能情况?提示:30 岁就是其中一种可能哦.请填写表示可能情况的种数。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
7x-y=32. 生日蜡烛某君从某年开始每年都举办一次生日party ,并且每次都要吹熄与年龄相同根数的蜡烛现在算起来,他一共吹熄了236 根蜡烛。
请问,他从多少岁开始过生日party 的?请填写他开始过生日party 的年龄数。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
26 #include<iostream> using namespace std;int main(){int i,j;int sum=0; for(i=1;i<=100;i++){ // 年龄sum=0; for(j=i;j<=100;j++){ // 蜡烛数sum=sum+j;if(sum==236){ cout<<i<<endl;break;}}}}3. 方格填数如下的10 个格子填入0~9 的数字。
要求:连续的两个数字不能相邻。
(左右、上下、对角都算相邻) 一共有多少种可能的填数方案?请填写表示方案数目的整数。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
// 用dfs 求#include<iostream> #include<cstring> #include<cmath> using namespace std;const int maxn=4;int mp[maxn][maxn];int flag[10];int ans=0;int init() {memset(mp,-10, sizeof mp); memset(flag,0, sizeof flag);}int fx[4]= {0,-1,-1,-1},fy[4]= {-1,-1,0,1};int check(int i,int j) {for(int f=0; f<4; f++) {if(abs(mp[i][j]-mp[i+fx[f]][j+fy[f]])!=1||i+fx[f]<1||j+fy[f]>4||j+fy[f]<1 ) continue;elsereturn 0;}return 1;}void dfs(int i,int j) {if(i==3&&j==4) {ans++;return ;}for(int num=0; num<=9; num++) {if(!flag[num]) { mp[i][j]=num; flag[num]=1; if(check(i,j)) if(j==4) dfs(i+1,1);elsedfs(i,j+1); flag[num]=0;}}}int main() {init();dfs(1,2);cout<<ans;}// 暴力求解#include <iostream>using namespace std;int ans=0;void swap(int *a,int *b){int *c;c=a;a=b;b=c;}int f(int a[])// 判断这种排列组合是否符合题意{if(a[0]-a[4]==-1||a[0]-a[4]==1) return 0;if(a[3]-a[4]==-1||a[3]-a[4]==1) return 0;if(a[5]-a[4]==-1||a[5]-a[4]==1) return 0;if(a[7]-a[4]==-1||a[7]-a[4]==1)return 0;if(a[8]-a[4]==-1||a[8]-a[4]==1)return 0;if(a[9]-a[4]==-1||a[9]-a[4]==1)return 0;if(a[1]-a[4]==-1||a[1]-a[4]==1)return 0;if(a[1]-a[5]==-1||a[1]-a[5]==1)return 0;if(a[1]-a[6]==-1||a[1]-a[6]==1)return 0;if(a[0]-a[5]==-1||a[0]-a[5]==1)return 0;if(a[2]-a[5]==-1||a[2]-a[5]==1)return 0;if(a[8]-a[5]==-1||a[8]-a[5]==1)return 0;if(a[9]-a[5]==-1||a[9]-a[5]==1)return 0;if(a[6]-a[5]==-1||a[6]-a[5]==1)return 0;if(a[6]-a[9]==-1||a[6]-a[9]==1)return 0;if(a[6]-a[2]==-1||a[6]-a[2]==1)return 0;if(a[3]-a[0]==-1||a[3]-a[0]==1)return 0;if(a[3]-a[7]==-1||a[3]-a[7]==1)return 0;if(a[8]-a[7]==-1||a[8]-a[7]==1)return 0;if(a[8]-a[3]==-1||a[8]-a[3]==1)return 0;if(a[9]-a[8]==-1||a[9]-a[8]==1)return 0;if(a[1]-a[0]==-1||a[1]-a[0]==1)return 0;if(a[1]-a[2]==-1||a[1]-a[2]==1)return 0;}void perm(int a[],int m,int len)//列举出0-9 所有的组合进行判断{if(m==len-1){if(f(a)) ans++;return ;}for(int i=m;i<len;i++){swap(a[m],a[i]); perm(a,m+1,len); swap(a[m],a[i]);} } int main() {int a[10] = {0,1,2,3,4,5,6,7,8,9}; perm(a,0,10);cout<<ans<<endl; return 0;}4. 快速排序排序在各种场合经常被用到。
蓝桥杯试题及答案
蓝桥杯试题及答案蓝桥杯是面向全国高校计算机专业学生的程序设计竞赛,由工业和信息化部人才交流中心主办,旨在提高学生的编程能力、算法设计能力以及团队合作能力。
以下是一份蓝桥杯试题及答案的示例,供参考。
### 蓝桥杯程序设计竞赛试题及答案#### 题目一:求最大公约数题目描述:给定两个正整数 a 和 b,请编写一个程序计算它们的最大公约数(GCD)。
输入格式:输入包含两个整数 a 和 b,用空格分隔。
输出格式:输出 a 和 b 的最大公约数。
样例输入:```24 36```样例输出:``````答案:```c#include <stdio.h>int gcd(int a, int b) {while (b != 0) {int temp = b;b = a % b;a = temp;}return a;}int main() {int a, b;scanf("%d %d", &a, &b);printf("%d\n", gcd(a, b));return 0;}```#### 题目二:字符串反转题目描述:编写一个程序,实现对输入的字符串进行反转。
输入格式:输入一个字符串。
输出格式:输出反转后的字符串。
样例输入:```Hello World```样例输出:`````ldrow olleH```答案:```c#include <stdio.h>#include <string.h>int main() {char str[1000];scanf("%s", str);int len = strlen(str);for (int i = len - 1; i >= 0; i--) { printf("%c", str[i]);}return 0;}```#### 题目三:二分查找题目描述:在一个已排序的数组中,使用二分查找算法找出一个特定元素的位置。
第七届蓝桥杯javaB组真题解析-方格填数(第六题)
第七届蓝桥杯javaB组真题解析-⽅格填数(第六题)题⽬/*⽅格填数如下的10个格⼦+--+--+--+| | | |+--+--+--+--+| | | | |+--+--+--+--+| | | |+--+--+--+(如果显⽰有问题,也可以参看【图1.jpg】)填⼊0~9的数字。
要求:连续的两个数字不能相邻。
(左右、上下、对⾓都算相邻)⼀共有多少种可能的填数⽅案?请填写表⽰⽅案数⽬的整数。
注意:你提交的应该是⼀个整数,不要填写任何多余的内容或说明性⽂字。
*/答案1580代码1public class Main {2static int sum = 0 ;3public static void main(String[] args) {4int a[] = {0,1,2,3,4,5,6,7,8,9};5int b[] = new int[10];6 String s = "";7 f(a,b,0,s);8 System.out.println(sum);9 }10private static void f(int[] a,int[] b,int k,String s) {11if(k!=0 && k!=1 && k!=4 && k!=8 ){12if(Math.abs(b[k-1]-b[k-2])==1) return;13 }14if(k>=4 && k<=10 && k!=7){15if(Math.abs(b[k-1]-b[k-4])==1) return;16 }17if(k>=5 && k<=10){18if(Math.abs(b[k-1]-b[k-5])==1) return;19 }20if(k==6 || k==7 || k==9 || k==10){21if(Math.abs(b[k-1]-b[k-6])==1) return;22 }2324if(k==a.length) {25 sum++;26 System.out.println(s);27return;28 }29for(int i=0;i<a.length;i++){30 String ss = s;31if(a[i]==-1) continue;32 b[k] = a[i];33 ss += a[i];34 a[i] = -1;35 f(a,b,k+1,ss);36 a[i] = b[k];37 }383940 }41 }分析 这⼜是⼀道涉及到排列组合的算法题,我⽤的是⽐较简单和常见的解法,利⽤循环递归,开始依次向⽅格⾥⾯填数, 每填⼀个数都会判断⼀下这个数是不是符合条件,如果符合条件则递归进去填下⼀个,如果不符合条件则return,当满⾜在满⾜条件的情况下数填完之后(k==10),则sum++,计数加⼀ 因为判断条件对⽅格有所依赖,所以想在短时间内写出⼀个⽐较完美通⽤的算法是有点困难的,我们可以把情况细分,使得条件结构更清晰⼀点, 再说⼀个我觉得⽐较有创意的⼀点,这也是我最近学到的,就是⽤⼀个字符串,让这个字符串也参与递归,就可以巧妙的可以把每次的情况都输出来了,我很喜欢。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
/**
*@authorleibaobao
* 煤球数目
* 解:100层为1+2+3....+100 = 5050
*/
publicclass_1 {
publicstaticvoidmain(String[] args) {
//TODOAuto-generated method stub
for(intj = i; j < 100; j++){
sum += j;
if(sum == 236)
System.out.println(i);
}
sum = 0;
}
}
}
packagecom.diqijie.shengsai;
importjava.util.HashSet;
/**
*@authorleibaobao
// TODO Auto-generated method stub
flag[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)){
*/
publicclass_5 {
publicstaticvoidf(int[] a,intk,intn, String s) {
if(k == a.length) {
if(n == 0)
System.out.println(s);
return;
}
String s2 = s;
for(inti = 0; i <= a[k]; i++) {
inttemp_2 = c*(d*100+e*10+f);
inttemp_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);
/**
*@authorleibaobao抽签
* 解:填代码题读懂即可,dfs
*/
publicclass_5 {
publicstaticvoidf(int[] a,intk,intn, String s) {
if(k == a.length) {
if(n == 0)
System.out.println(s);
// TODO Auto-generated method stub
boolean 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) {
for(inta = 1; a < 10; a++)
for(intb = 1; b < 10; b++)
for(intc = 1; c < 10; c++)
for(intd = 1; d < 10; d++)
for(inte = 1; e < 10; e++)
for(intf = 1; f < 10; f++)
intsum = 0;
for(inti = 1; i <= 100; i++){
for(intj = 1; j <= i; j++)
sum += j;
}
System.out.println(sum);
}
}
packagecom.diqijie.shengsai;
/**
*@authorleibaobao
for(intg = 1; g < 10; g++)
for(inth = 1; h < 10; h++)
for(inti = 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&&
publicstaticint[]n=newint[3];
publicstaticintmin;
return;
}
String s2 = s;
for(inti = 0; i <= a[k]; i++) {
f(a,k+1,5-s2.length(),s2);
s2 += (char) (k +'A');
}
}
publicstaticvoidmain(String[] args) {
int[] a = { 4, 2, 2, 1, 1, 3 };
importjava.util.Scanner;
/**
*@authorleibaobao
* 取球博弈
* 解:此解是错的要进行追踪更进的话,访问我博客
/u013993712/article/details/51163744
其他题均同,记得点赞哟
*/
publicclass_9 {
if(a[j] == 1)
continue;
a[j] = 1;
for(intk = 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));// 填空位置
System.out.println(a +" "+ b +" "+ c +" "+ d);
breakout;
}
}
longtime1 = System.currentTimeMillis();
System.out.println(time1-time);
}
}
packagecom.diqijie.shengsai;
a[k] = 0;
}
a[j] = 0;
}
a[i] = 0;
}
}
publicstaticvoidmain(String[] args) {
int[] a =newint[9];
a[0] = 1;
for(intb = 1; b < a.length; b++) {
a[b] = 1;
for(intc = b + 1; c < a.length; c++) {
* 生日蜡烛
* 解:人最大也不过100岁,不要想太多。暴力一点
*/
publicclass_2 {
publicstaticvoidmain(String[] args) {
//TODOAuto-generated method stub
intsum = 0;
for(inti = 0; i < 100; i++){
f(a,k+1,5-s2.length(),s2);
s2 += (char) (k +'A');
}
}
publicstaticvoidmain(String[] args) {
int[] a = { 4, 2, 2, 1, 1, 3 };
f(a, 0, 5,"");
}
}
packagecom.diqijie.shengsai;
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);
}
}
}
}
packagecom.diqijie.shengsai;
importjava.util.Scanner;
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]);