1、煤球数目

有一堆煤球,堆成三角棱锥形。具体: 第一层放 1个, 第二层 3 个(排列成三角形), 第三层 6 个(排列成三角形), 第四层 10 个(排列成三角形), .... 如果一共有 100层,共有多少个煤球?

    public static void main(String[] args) {int sum = 0, num = 0;for (int i = 1; i <= 100; i++){num += i;sum += num;}System.out.println (sum);}

总结:这里看错以为是输出第100个,输出5050没过,少个sum += num; 总数每行加起来

2、生日蜡烛

某君从某年开始每年都举办一次生日 partyparty,并且每次都要吹熄与年龄相同根数的蜡烛。

现在算起来,他一共吹熄了 236根蜡烛。请问,他从多少岁开始过生日 party的?

请输出他开始过生日party的年龄数。

public class Main {public static void main(String[] args) {int sum = 0;for (int i = 1; i < 50; i++) {for (int j = i; j < 50; j++) {sum += j;if (sum == 236) {System.out.println(i);return;}if (sum > 236) break; }sum = 0;}}
}

总结:用的双重循环第一个开始年龄 第二个结束年龄,然后就判断找,但是容易超时。我们当sum在某次大于236直接break,找到直接return来减少循环次数。

3、搭积木

小明最近喜欢搭数字积木, 一共有 10 块积木,每个积木上有一个数字,0 ~ 9。

搭积木规则: 每个积木放到其它两个积木的上面,并且一定比下面的两个积木数字小。 最后搭成 4 层的金字塔形,必须用完所有的积木。

public class Main {private static int ans;private static int[] a = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };public static void main(String[] args) {f(0);System.out.println(ans);}private static void f(int k) {if (k == 10) {ans++;}for (int i = k; i < a.length; i++) {int t = a[i];a[i] = a[k];a[k] = t;if(k == 1 && a[1]<a[0] ||k == 2 && a[2]<a[0]||k == 3 && a[3]<a[1]||k == 4 && (a[4]<a[1]||a[4]<a[2])||k == 5 && a[5] < a[2]||k == 6 && a[6]<a[3]||k == 7 && (a[7]<a[3]|| a[7]<a[4])||k == 8 && (a[8]<a[4]|| a[8]<a[5])||k == 9 && a[9]<a[5]) {t = a[i];a[i] = a[k];a[k] = t;continue;}f(k + 1);t = a[i];a[i] = a[k];a[k] = t;}}private static void check() {if (a[0] > a[1] || a[0] > a[2] || a[1] > a[3] || a[1] > a[4] || a[2] > a[4] || a[2] > a[5] || a[3] > a[6]|| a[3] > a[7] || a[4] > a[7] || a[4] > a[8] || a[5] > a[8] || a[5] > a[9])return;ans++;}
}

总结:看到1到9就应该想到全排列了,基本上每年都有全排列,这个就是全排列加减枝。全排列一定要熟练默写。

4、分小组

9名运动员参加比赛,需要分3组进行预赛。 有哪些分组的方案呢?

我们标记运动员为 A,B,C,... I。下面的程序列出了所有的分组方法。代码填空题

public class Main
{public static String remain(int[] a){String s = "";for(int i=0; i<a.length; i++){if(a[i] == 0) s += (char)(i+'A');}    return s;}public static void 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;if(k==3)System.out.println(____________________________);a[k]=0;}a[j]=0;}a[i] = 0;}}public static void main(String[] args){int[] a = new int[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;}}
}

答案:s+" "+(char)(i+'A') + (char)(j+'A')+ (char)(k+'A')+" "+remain(a)

总结:先把填空那行注释掉,然后运行一下,发现打出500多知道是总数,然后就知道横线是输出每一行,然后下面发现传s和数组进来,然后debug发现s是abc就知道s为前3个数,退出我们这个代码是中间3个数,然后照猫画虎,最后发现remain方法没用过,idea黑色,然后发现是最后3个数,拼接上去。

5、抽签

X星球要派出一个 5 人组成的观察团前往 W 星。

其中:

A 国最多可以派出 4 人。B 国最多可以派出 2 人。C 国最多可以派出 2 人。

那么最终派往 W 星的观察团会有多少种国别的不同组合呢?

代码填空题

public class Main
{public static void 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++){______________________;s2 += (char)(k+'A');}}public static void main(String[] args){int[] a = {4,2,2,1,1,3};f(a,0,5,"");}
}

答案:f(a,k+1,n-i,s2)

总结:我们看到当k==什么什么然后return的一般都是递归,然后又发现k一开始是0,n是5就知道,k肯定是变大,然后当大到length就return,n是5,判断可能是应该要减小,然后一直是a数组,s2没有用到,所有大概猜测出答案。这种递归要搞清楚每个参数的含义和变化方向

6、寒假作业

一看就是全排列

public class Main {static int a[] = {1,2,3,4,5,6,7,8,9,10,11,12,13};static int count;public static void main(String[] args) {f(0);System.out.print(count);}public static void f(int k){if(k==13){if(check())count++;}for(int i=k;i<13;i++){int t=a[k];a[k]=a[i];a[i]=t;if(k==2&&a[0]+a[1]!=a[2] ||k==5&&a[3]-a[4]!=a[5]){t=a[k];a[k]=a[i];a[i]=t;continue;}f(k+1);t=a[k];a[k]=a[i];a[i]=t;}}public static boolean check(){if(a[0]+a[1]==a[2] &&a[3]-a[4]==a[5] &&a[6]*a[7]==a[8] &&a[9]%a[10]==0 &&a[9]/a[10]==a[11]){return true;}return false;}
}

总结:全排列模板必须熟练默写,这个第一次交换进递归的时候可以进行减枝,跟上面题3一样。没什么好说,交换递归交换回去,然后达到if条件就根据题目来check()

7、凑算式

public class test {static int a[]= {1,2,3,4,5,6,7,8,9};static int count;public static void main(String[] args) {f(0);System.out.print(count);}public static void f(int k) {if(k==9) {if(check()) {count++;}}for(int i=k;i<9;i++) {int t=a[i];a[i]=a[k];a[k]=t;f(k+1);t=a[i];a[i]=a[k];a[k]=t;}}public static boolean check() {int num1 = a[3]*100+a[4]*10+a[5];int num2 = a[6]*100+a[7]*10+a[8];int num3 = a[1]*num2+a[2]*num1;int num4 = a[2]*num2;if(num3%num4 != 0)return false;if(a[0]+num3/num4 == 10)return true;return false;}
}

总结:又是全排列,但是这里有坑,可能除不尽这里必须通分一下,才能除尽。

8、方格填数

import java.util.Scanner;
import static java.lang.Math.abs;
// 1:无需package
// 2: 类名必须Main, 不可修改public class Main {static int[] a={0,1,2,3,4,5,6,7,8,9};static int ans=0;public static void main(String[] args) {f(0);System.out.println(ans);}private static void f(int k) {if (k==10){if (check())ans++;return;}for (int i=k;i<10;i++){int t=a[i];a[i]=a[k];a[k]=t;f(k+1);t=a[i];a[i]=a[k];a[k]=t;}}private static boolean check() {if (    abs(a[0]-a[1])==1||abs(a[0]-a[3])==1||abs(a[0]-a[4])==1||abs(a[0]-a[5])==1||abs(a[1]-a[2])==1||abs(a[1]-a[4])==1||abs(a[1]-a[5])==1||abs(a[1]-a[6])==1||abs(a[2]-a[5])==1||abs(a[2]-a[6])==1||abs(a[3]-a[4])==1||abs(a[3]-a[7])==1||abs(a[3]-a[8])==1||abs(a[4]-a[5])==1||abs(a[4]-a[7])==1||abs(a[4]-a[8])==1||abs(a[4]-a[9])==1||abs(a[5]-a[6])==1||abs(a[5]-a[8])==1||abs(a[5]-a[9])==1||abs(a[6]-a[9])==1||abs(a[7]-a[8])==1||abs(a[8]-a[9])==1){return false;}return true;}
}

总结:还是全排列,但是这次的check是个体力活,用到 abs(a-b) 是不会的,绝对值,学习一下

9、四平方和

import java.awt.*;
import java.util.Scanner;public class Main {public static void main(String args[]) {Scanner in = new Scanner(System.in);int n=in.nextInt();int m=(int)Math.sqrt(n);for (int i = 0; i <= m; i++) {for (int j = i; j <= m; j++) {for (int k = j; k <= m; k++) {for (int l = k; l <=m ; l++) {if (i*i+j*j+k*k+l*l==n){System.out.println(i+" "+j+" "+k+" "+l);return;}}}}}}
}

总结:就是暴力枚举4个数字,但是直接暴力超时,我们要优化,后面的数是从前面的数开始循环,所有数都不大于输入的开根号。int m=(int)Math.sqrt(n);

10、有奖猜谜

小明很喜欢猜谜语。 最近,他被邀请参加了 X 星球的猜谜活动。

每位选手开始的时候都被发给 777777 个电子币。 规则是:猜对了,手里的电子币数目翻倍, 猜错了,扣除 555555 个电子币, 扣完为止。

小明一共猜了 1515 条谜语。 战果为:vxvxvxvxvxvxvvxvxvxvxvxvxvxvvx 其中 vv 表示猜对了,xx 表示猜错了。

请你计算一下,小明最后手里的电子币数目是多少。

public class Main {public static void main(String[] args) {String string = new String();string="vxvxvxvxvxvxvvx";int coin=777;for (int i = 0; i < 15; i++) {if(string.charAt(i)=='v'){coin*=2;}else if (string.charAt(i)=='x'){coin-=555;}if (coin==0){System.out.println("game over"+i);}}System.out.println(coin);}
}

总结:送分题,我用了数组的形式,要学会用String,能直接从题目复制,节省时间string.charAt(i)=='v'

11、骰子游戏

同时掷出 3 个普通骰子(6 个面上的数字分别是 1~6)。 如果其中一个骰子上的数字等于另外两个的和,你就赢了。

下面的程序计算出你能获胜的精确概率(以既约分数表示) 填空

import java.util.*;
public class Main
{public static int gcd(int a, int b){if(b==0) return a;return gcd(b,a%b);}public static void main(String[] args){    int n = 0;for(int i=0; i<6; i++)for(int j=0; j<6; j++)for(int k=0; k<6; k++){if(________________________________) n++;}int m = gcd(n,6*6*6);System.out.println(n/m + "/" + 6*6*6/m);}
}

答案:(i+j+1==k) || (i+k+1==j) || (j+k+1==i)

总结:这题有坑,下标是从下标为0开始的,我们的骰子是从1到6,所以必须加1,我题目也看错了,一开始看题看错以为两个骰子相等就赢。

蓝桥杯2016年真题 | Java组相关推荐

  1. 第十三届蓝桥杯国赛真题 PythonB组 复盘以及获奖感言(国一!!!)

    第十三届蓝桥杯国赛真题 PythonB组 复盘以及获奖感言(国一) 文章目录 第十三届蓝桥杯国赛真题 PythonB组 复盘以及获奖感言(国一)

  2. 2022第十三届蓝桥杯国赛真题javaB组

    文章目录 试题A: 重合次数 试题B: 数数 试题C: 左移右移 试题D: 窗口 试题E: 迷宫 试题F: 小球称重 试题G: 背包与魔法 试题H: 修路 试题I: 围栏 试题J: 好数之和 试题A: ...

  3. 蓝桥杯13-20届真题答案和解析(Java 大学 B 组)2013年省赛真题3_振兴中华

    蓝桥杯13-20届真题解析(Java 大学 B 组)2013年省赛真题3_振兴中华 一.振兴中华[填空] 1.题目描述 2.简要分析 3.代码实现(递归) 4.答案 一.振兴中华[填空] 1.题目描述 ...

  4. 小唐开始刷蓝桥(五)2016年第七届C/C++ B组蓝桥杯省赛真题

    文章目录 前言 一.煤球数目 二.生日蜡烛 三.凑算式 四.快速排序 五.抽签 六.方格填数 七.剪邮票 八.四平方和 九.交换瓶子 十.最大比例 上一篇: 小唐开始刷蓝桥(四)2017年第八届C/C ...

  5. 小唐开始刷蓝桥(二)2019年第十届C/C++ B组蓝桥杯省赛真题

    文章目录 前言 一.组队 二.年号字符 三.数列求值 四.数的分解 五.迷宫 六.特别数的和 七.完全二叉树的权值 八.等差数列 九.后缀表达式 十.灵能传输 上一篇: 小唐开始刷蓝桥(一)2020年 ...

  6. 小唐开始刷蓝桥(六)2015年第六届C/C++ B组蓝桥杯省赛真题

    文章目录 前言 一.奖券数目 二.星系炸弹 三.三羊献瑞 四.格子中输出 五.九数组分数 六.加法变乘法 七.牌型种数 八.移动距离 九.垒骰子 十.生命之树 上一篇: 小唐开始刷蓝桥(五)2016年 ...

  7. 小唐开始刷蓝桥(四)2017年第八届C/C++ B组蓝桥杯省赛真题

    文章目录 前言 一.购物单 二.等差素数列 三.承压计算 四.方格分割 五.取数位 六.最大公共子串 七.日期问题 八.包子凑数 九.分巧克力 十.k倍区间 上一篇: 小唐开始刷蓝桥(三)2019年第 ...

  8. 2017年第四八届C/C++ B组蓝桥杯省赛真题

    2017年第八届C/C++ B组蓝桥杯省赛真题 真题 第一题:购物单 第二题:等差素数列 第三题:承压计算 第四题:方格分割 第五题:取数位 第六题:最大公共子串 第七题:日期问题 第八题:包子凑数 ...

  9. 2018年第九届C/C++ A组蓝桥杯省赛真题(python解法)

    2018年第九届C/C++ A组蓝桥杯省赛真题 第一题:哪天返回 题目描述 小明被不明势力劫持.后莫名其妙被扔到x星站再无问津.小明得知每天都有飞船飞往地球,但需要108元的船票,而他却身无分文. 他 ...

最新文章

  1. mysql导出数据到txt太慢_分享:mysql导出数据到txt文件
  2. HashMap原理和使用
  3. 操作笔记:tomcat在正式环境的常见问题和idea的远程调试
  4. EntityFramework Core表名原理解析,让我来,揭开你神秘的面纱
  5. L2-1 包装机 (25 分)
  6. 人脸识别ArcfaceDemo for Windows 分享
  7. sql server存储过程解密
  8. 作为音乐创作人,你可知道?有可以自己写歌词的软件,专门写歌词的软件,创作歌词的软件,帮忙写歌词的软件
  9. window10计算机策略,如何打开组策略,教您win10如何打开组策略
  10. Xshell 发送文本到当前Xshell窗口的全部会话
  11. Github 汉化插件教程
  12. 直接收藏-超级好用的国内色彩搭配网站
  13. [luogu P2183] [国家集训队]礼物 {exlucas}
  14. python改变当前工作目录_在python中更改当前工作目录
  15. SEVERE: Could not contact [localhost:8005] (base port [8005] and offset [0]). Tomcat may not be runn
  16. 如何升级MacOS到指定版本
  17. Use HAProxy to load balance 300k concurrent tcp socket connections: Port Exhaustion, Keep-alive and
  18. arange()用于生成一维数组 reshape()将一维数组转换为多维数组
  19. 工业机器人码垛教学实施_工业机器人码垛方案设计
  20. 汉字与UNICODE的转换 通过文件操作

热门文章

  1. C语言命令行参数详解
  2. 广告语如何翻译,哪里比较专业
  3. 使用Vim写LaTeX代码(Vim+Vimtex+Skim)
  4. c语言递归函数头文件,C语言函数,递归,功能模块头文件(习题)
  5. 汇正财经骗局?中国银行行业 China Banks存贷款定价机制详解
  6. 上海开放大学大学英语计分作业二答案
  7. 你的迷惑,Chia大佬来亲自解开
  8. 什么是换手率?如何计算?
  9. 国开电大个税填报指南小测验
  10. 【数据结构】线性表4——顺序表和链表的比较