算法笔记_110:第四届蓝桥杯软件类省赛真题(JAVA软件开发高职高专组部分习题)试题解答
目录
前言:以下试题解答代码部分仅供参考,若有不当之处,还请路过的同学提醒一下~
1 猜年龄
标题: 猜年龄 美国数学家维纳(N.Wiener)智力早熟,11岁就上了大学。他曾在1935~1936年应邀来中国清华大学讲学。 一次,他参加某个重要会议,年轻的脸孔引人注目。于是有人询问他的年龄,他回答说: “我年龄的立方是个4位数。我年龄的4次方是个6位数。这10个数字正好包含了从0到9这10个数字,每个都恰好出现1次。” 请你推算一下,他当时到底有多年轻。 通过浏览器,直接提交他那时的年龄数字。
注意:不要提交解答过程,或其它的说明文字。 18
直接枚举出所有可能的4位数,和6位数情况下的x,然后直接看结果,轻易知道是18。
下面程序运行结果:
x = 18, x^3 = 5832, x^4 = 104976
x = 19, x^3 = 6859, x^4 = 130321
x = 20, x^3 = 8000, x^4 = 160000
x = 21, x^3 = 9261, x^4 = 194481
public class Main { public void printResult() {
for(int x = 1;x <= 100;x++) {
int a = x * x * x;
int b = x * x * x * x;
if(a > 999 && a < 10000 && b > 99999 && b < 1000000) {
System.out.println("x = "+x+", x^3 = "+a+", x^4 = "+b);
}
}
} public static void main(String[] args) {
Main test = new Main();
test.printResult();
}
}
2 组素数
标题: 组素数 素数就是不能再进行等分的数。比如:2 3 5 7 11 等。
9 = 3 * 3 说明它可以3等分,因而不是素数。 我们国家在1949年建国。如果只给你 1 9 4 9 这4个数字卡片,可以随意摆放它们的先后顺序(但卡片不能倒着摆放啊,我们不是在脑筋急转弯!),那么,你能组成多少个4位的素数呢? 比如:1949,4919 都符合要求。 请你提交:能组成的4位素数的个数,不要罗列这些素数!! 注意:不要提交解答过程,或其它的辅助说明文字。 6
import java.util.ArrayList; public class Main {
public ArrayList<Integer> list = new ArrayList<Integer>();
public static int count = 0; public boolean check(int[] A) {
int num = A[0]*1000 + A[1]*100 + A[2]*10 + A[3];
for(int i = 2;i < num;i++) {
if(num % i == 0)
return false;
if(i > num / 2)
break;
}
if(list.contains(num))
return false;
else {
list.add(num);
}
return true;
} public void swap(int[] A, int a, int b) {
int temp = A[a];
A[a] = A[b];
A[b] = temp;
} public void dfs(int[] A, int step) {
if(step == A.length) {
if(check(A)) {
count++;
for(int i = 0;i < 4;i++)
System.out.print(A[i]);
System.out.println();
return;
}
} else {
for(int i = step;i < A.length;i++) {
swap(A, i, step);
dfs(A, step + 1);
swap(A, i, step);
}
}
return;
} public static void main(String[] args) {
Main test = new Main();
int[] A = {1,9,4,9};
test.dfs(A, 0);
System.out.println("最终结果:"+count);
}
}
3 第39级台阶
标题: 第39级台阶 小明刚刚看完电影《第39级台阶》,离开电影院的时候,他数了数礼堂前的台阶数,恰好是39级! 站在台阶前,他突然又想着一个问题: 如果我每一步只能迈上1个或2个台阶。先迈左脚,然后左右交替,最后一步是迈右脚,也就是说一共要 走偶数步。那么,上完39级台阶,有多少种不同的上法呢? 请你利用计算机的优势,帮助小明寻找答案。 要求提交的是一个整数。
注意:不要提交解答过程,或其它的辅助说明文字。 51167078
public class Main {
public static int count = 0; public void dfs(int sum, int step) {
if(sum > 39)
return;
if(sum == 39) {
if(step % 2 == 0) //题意规定,第一步为左脚,最后一步为右脚
count++;
return;
}
dfs(sum + 1, step + 1);
dfs(sum + 2, step + 1);
return;
} public static void main(String[] args) {
Main test = new Main();
test.dfs(0, 0);
System.out.println(count);
}
}
public class Main1 { public static void main(String[] args) {
int[][] dp = new int[39][2];
dp[0][0] = 1; //第一步必须迈左脚(题意规定),左脚到达第一个台阶只有1种可能
dp[0][1] = 0; //第一步不能迈右脚,右脚无法到达一个台阶
dp[1][0] = 1; //左脚到达第二个台阶只有一种可能
dp[1][1] = 1; //右脚到达第二个台阶也只有一种可能
for(int i = 2;i < 39;i++) {
dp[i][0] = dp[i - 1][1] + dp[i - 2][1];
dp[i][1] = dp[i - 1][0] + dp[i - 2][0];
}
System.out.println(dp[38][1]); //最终到达39个台阶,必须是右脚
}
}
4 核桃的数量
标题:核桃的数量 小张是软件项目经理,他带领3个开发组。工期紧,今天都在加班呢。为鼓舞士气,小张打算给每个组发一袋核桃(据传言能补脑)。他的要求是: 1. 各组的核桃数量必须相同
2. 各组内必须能平分核桃(当然是不能打碎的)
3. 尽量提供满足1,2条件的最小数量(节约闹革命嘛) 程序从标准输入读入:
a b c
a,b,c都是正整数,表示每个组正在加班的人数,用空格分开(a,b,c<30) 程序输出:
一个正整数,表示每袋核桃的数量。 例如:
用户输入:
2 4 5 程序输出:
20 再例如:
用户输入:
3 1 1 程序输出:
3 资源约定:
峰值内存消耗(含虚拟机) < 64M
CPU消耗 < 1000ms 请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。 所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
注意:不要使用package语句。不要使用jdk1.6及以上版本的特性。
注意:主类的名字必须是:Main,否则按无效代码处理。
import java.util.Scanner; public class Main {
//求取a和b的最大公约数
public int gcd(int a, int b) {
if(b == 0)
return a;
return gcd(b, a % b);
} public void printResult(int a, int b, int c) {
int a1 = gcd(a, b);
int lcm1 = a * b / a1; //a和b的最小公倍数
int a2 = gcd(lcm1, c);
int lcm2 = lcm1 * c / a2; //a、b、c的最小公倍数
System.out.println(lcm2);
} public static void main(String[] args) {
Main test = new Main();
Scanner in = new Scanner(System.in);
int a = in.nextInt();
int b = in.nextInt();
int c = in.nextInt();
test.printResult(a, b, c);
}
}
5 打印十字图
标题:打印十字图 小明为某机构设计了一个十字型的徽标(并非红十字会啊),如下所示(可参见p1.jpg) $$$$$$$$$$$$$
$ $
$$$ $$$$$$$$$ $$$
$ $ $ $
$ $$$ $$$$$ $$$ $
$ $ $ $ $ $
$ $ $$$ $ $$$ $ $
$ $ $ $ $ $ $
$ $ $ $$$$$ $ $ $
$ $ $ $ $ $ $
$ $ $$$ $ $$$ $ $
$ $ $ $ $ $
$ $$$ $$$$$ $$$ $
$ $ $ $
$$$ $$$$$$$$$ $$$
$ $
$$$$$$$$$$$$$ 对方同时也需要在电脑dos窗口中以字符的形式输出该标志,并能任意控制层数。 为了能准确比对空白的数量,程序要求对行中的空白以句点(.)代替。 输入格式:
一个正整数 n (n<30) 表示要求打印图形的层数 输出:
对应包围层数的该标志。 例如:
用户输入:
1
程序应该输出:
..$$$$$..
..$...$..
$$$.$.$$$
$...$...$
$.$$$$$.$
$...$...$
$$$.$.$$$
..$...$..
..$$$$$.. 再例如:
用户输入:
3
程序应该输出:
..$$$$$$$$$$$$$..
..$...........$..
$$$.$$$$$$$$$.$$$
$...$.......$...$
$.$$$.$$$$$.$$$.$
$.$...$...$...$.$
$.$.$$$.$.$$$.$.$
$.$.$...$...$.$.$
$.$.$.$$$$$.$.$.$
$.$.$...$...$.$.$
$.$.$$$.$.$$$.$.$
$.$...$...$...$.$
$.$$$.$$$$$.$$$.$
$...$.......$...$
$$$.$$$$$$$$$.$$$
..$...........$..
..$$$$$$$$$$$$$.. 请仔细观察样例,尤其要注意句点的数量和输出位置。 资源约定:
峰值内存消耗(含虚拟机) < 64M
CPU消耗 < 1000ms 请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。 所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
注意:不要使用package语句。不要使用jdk1.6及以上版本的特性。
注意:主类的名字必须是:Main,否则按无效代码处理。
import java.util.Scanner; public class Main { public void printResult(int n) {
int len = 5 + 4 * n; //易知,输入为n输出的图像一定为一个正方形,且边长为len
char[][] A = new char[len][len]; //用于存放最终输出结果
int x = len / 2; //输出图像正中间的十字图像的正中间一点的坐标为(x, x)
for(int i = 0;i < len;i++)
for(int j = 0;j < len;j++)
A[i][j] = '.'; //初始化为'.',后续涂'$'
//首先,涂图像正中间的十字
for(int i = x - 2;i <= x + 2;i++) {
A[i][x] = '$'; //涂十字的一竖
A[x][i] = '$'; //涂十字的一横
}
//接着,涂正中间十字由内向外的十字圈,这里先图十字圈的上下一横和左右一竖
for(int i = 0;i < n;i++) { //i表示当前涂第i个十字圈(由内向外)
for(int j = x - (2 + 2*i);j <= x + (2 + 2*i);j++) {
A[x - (4 + 2*i)][j] = '$'; //涂十字圈的上面一横
A[x + (4 + 2*i)][j] = '$'; //涂十字圈的下面一横
A[j][x - (4 + 2*i)] = '$'; //涂十字圈的左边一竖
A[j][x + (4 + 2*i)] = '$'; //涂十字圈的右边一竖
}
}
//最后,涂十字圈的四个L形状的图形,根据对称填涂(由里向外)
for(int i = 0;i < n;i++) {
//填十字圈左上方的L形状的图形,共三个点
A[x - (2 + 2*i)][x - (2 + 2*i)] = '$';
A[x - (2 + 2*i)][x - (2 + 2*i) - 1] = '$';
A[x - (2 + 2*i) - 1][x - (2 + 2*i)] = '$';
//填右上方的L形状图形
A[x - (2 + 2*i)][x + (2 + 2*i)] = '$';
A[x - (2 + 2*i)][x + (2 + 2*i) + 1] = '$';
A[x - (2 + 2*i) - 1][x + (2 + 2*i)] = '$';
//填左下方的L形状的图形
A[x + (2 + 2*i)][x - (2 + 2*i)] = '$';
A[x + (2 + 2*i)][x - (2 + 2*i) - 1] = '$';
A[x + (2 + 2*i) + 1][x - (2 + 2*i)] = '$';
//填右下方的L形状的图形
A[x + (2 + 2*i)][x + (2 + 2*i)] = '$';
A[x + (2 + 2*i)][x + (2 + 2*i) + 1] = '$';
A[x + (2 + 2*i) + 1][x + (2 + 2*i)] = '$';
}
//打印最终结果
for(int i = 0;i < len;i++) {
for(int j = 0;j < len;j++) {
System.out.print(A[i][j]);
}
System.out.println();
}
return;
} public static void main(String[] args) {
Main test = new Main();
Scanner in = new Scanner(System.in);
int n = in.nextInt();
test.printResult(n);
}
}
6 买不到的数目
标题:买不到的数目 小明开了一家糖果店。他别出心裁:把水果糖包成4颗一包和7颗一包的两种。糖果不能拆包卖。 小朋友来买糖的时候,他就用这两种包装来组合。当然有些糖果数目是无法组合出来的,比如要买 10 颗糖。 你可以用计算机测试一下,在这种包装情况下,最大不能买到的数量是17。大于17的任何数字都可以用4和7组合出来。 本题的要求就是在已知两个包装的数量时,求最大不能组合出的数字。 输入:
两个正整数,表示每种包装中糖的颗数(都不多于1000) 要求输出:
一个正整数,表示最大不能买到的糖数 不需要考虑无解的情况 例如:
用户输入:
4 7
程序应该输出:
17 再例如:
用户输入:
3 5
程序应该输出:
7 资源约定:
峰值内存消耗(含虚拟机) < 64M
CPU消耗 < 3000ms 请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。 所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
注意:不要使用package语句。不要使用jdk1.6及以上版本的特性。
注意:主类的名字必须是:Main,否则按无效代码处理。
import java.util.Scanner; public class Main {
public static int max = 0; public void printResult(int a, int b) {
for(int i = 1;i <= a * b;i++) {
int lenA = i / a;
int lenB = i / b;
boolean judge = true;
for(int p = 0;p <= lenA;p++) {
for(int q = 0;q <= lenB;q++) {
if(p * a + q * b == i) {
judge = false;
break;
}
}
if(judge == false)
break;
}
if(judge == true) {
if(max < i)
max = i;
}
}
System.out.println(max);
} public static void main(String[] args) {
Main test = new Main();
Scanner in = new Scanner(System.in);
int a = in.nextInt();
int b = in.nextInt();
test.printResult(a, b);
}
}
算法笔记_110:第四届蓝桥杯软件类省赛真题(JAVA软件开发高职高专组部分习题)试题解答的更多相关文章
- 算法笔记_108:第四届蓝桥杯软件类省赛真题(JAVA软件开发本科A组)试题解答
目录 1 世纪末的星期 2 振兴中华 3 梅森素数 4 颠倒的价牌 5 三部排序 6 逆波兰表达式 7 错误票据 8 带分数 9 剪格子 10 大臣的旅费 前言:以下试题解答代码部分仅供参考,若有不 ...
- 算法笔记_214:第六届蓝桥杯软件类校赛真题(Java语言A组)
目录 1 题目一 2 题目二 3 题目三 4 题目四 5 题目五 6 题目六 7 题目七 前言:以下代码仅供参考,若有错误欢迎指正哦~ 1 题目一 一个串的子串是指该串的一个连续的局部.如果不要求连续 ...
- 算法笔记_109:第四届蓝桥杯软件类省赛真题(JAVA软件开发本科B组部分习题)试题解答
目录 1 马虎的算式 2 黄金连分数 3 有理数类 4 幸运数 5 连号区间数 前言:以下试题解答代码部分仅供参考,若有不当之处,还请路过的同学提醒一下~ 1 马虎的算式 标题: 马虎的算式 小明 ...
- 算法笔记_111:第五届蓝桥杯软件类省赛真题(Java本科A组)试题解答
目录 1 猜年龄 2 李白打酒 3 神奇算式 4 写日志 5 锦标赛 6 六角填数 7 绳圈 8 兰顿蚂蚁 9 斐波那契 10 波动数列 前言:以下试题解答代码部分仅供参考,若有不当之处,还请路 ...
- 算法笔记_112:第五届蓝桥杯软件类省赛真题(Java本科B组)试题解答
目录 1 武功秘籍 2 切面条 3 猜字母 4 大衍数列 5 圆周率 6 奇怪的分式 7 扑克序列 8 分糖果 9 地宫取宝 10 矩阵翻硬币 前言:以下试题解答代码部分仅供参考,若有不当之处, ...
- 算法笔记_204:第四届蓝桥杯软件类决赛真题(Java语言C组)
目录 1 好好学习 2 埃及分数 3 金蝉素数 4 横向打印二叉树 5 危险系数 6 公式求值 前言:以下代码仅供参考,若有错误欢迎指正哦~ 1 好好学习 汤姆跟爷爷来中国旅游.一天,他帮助中国的 ...
- 算法笔记_203:第四届蓝桥杯软件类决赛真题(C语言B组)
目录 1 猜灯谜 2 连续奇数和 3 空白格式化 4 高僧斗法 5 格子刷油漆 6 农场阳光 前言:以下代码仅供参考,若有错误欢迎指正哦~ 1 猜灯谜 标题:猜灯谜 A 村的元宵节灯会上有一迷题: ...
- 算法笔记_207:第五届蓝桥杯软件类决赛部分真题(Java语言C组)
目录 1 数字拆分 2 稍大的串 前言:以下代码仅供参考,若有错误欢迎指正哦~ 1 数字拆分 正整数可以表示为若干正整数的累加和. 如,对于正整数n=6,可以分划为: 6 5+1 4+2 4+1+ ...
- 算法笔记_211:第七届蓝桥杯软件类决赛部分真题(Java语言A组)
目录 1 阶乘位数 2 凑平方数 3 棋子换位 4 机器人塔 前言:以下代码仅供参考,若有错误欢迎指正哦~ 1 阶乘位数 阶乘位数 9的阶乘等于:362880 它的二进制表示为:10110001001 ...
随机推荐
- 多线程_java多线程环境下栈信息分析思路
导读:Java多线程开发给程序带来好处的同时,由于多线程程序导致的问题也越来越多,而且对问题的查找和分析解决对于菜鸟程序原来是是件头疼的事.下面我就项目中使用多线程开发程序过程中遇到的问题做详细的分析 ...
- [Dynamic Language] Python非子包引用
Python非子包引用 python的搜索路径其实是一个列表(sys.path) 导入模块时python会自动去找搜索这个列表当中的路径,如果路径中存在要导入的模块文件则导入成功. 在项目中如果要引用 ...
- 用swift开发仪表盘控件(一)
苹果swift刚刚推出不久,接触到这个语言是一个偶然的机会,无聊之余随便看了下它的语法: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveW5tYW95b2 ...
- linux usb信息查看与调试
lsusb cat /sys/kernel/debug/usb/devices T: Bus=02 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=12 M ...
- [Android Pro] activity-alias的使用
activity-alias是android里为了重复使用Activity而设计的. 当在Activity的onCreate()方法里,执行getIntent().getComponent().get ...
- Coursera课程《大家的python》(Python for everyone)课件
You can access the Google Drive containing all of the current and in-progress lecture slides for thi ...
- water-and-jug-problem
以下这个解法也是参考了一些讨论: https://leetcode.com/discuss/110235/c-solution-using-euclidean-algorithm 还有这个解释原理的, ...
- C#读写txt文件的两种方法介绍[转]
C#读写txt文件的两种方法介绍 1.添加命名空间 System.IO; System.Text; 2.文件的读取 (1).使用FileStream类进行文件的读取,并将它转换成char数组,然后输出 ...
- [leetcode]Construct Binary Tree from Preorder and Inorder Traversal @ Python
原题地址:http://oj.leetcode.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/ 题意:根 ...
- OA系统权限管理设计方案
(转)OA系统权限管理设计方案 OA系统权限管理设计方案 不同职责的人员,对于系统操作的权限应该是不同的.优秀的业务系统,这是最基本的功能. 可以对“组”进行权限分配.对于一个大企业的 ...