A、整数范围
本题总分:5 分
问题描述
用 8 位二进制(一个字节)来表示一个非负整数,表示的最小值是 0 ,则一般能表示的最大值是多少?
答案提交
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
package action; public class demo { public static void main(String[] args) { System.out.println(Integer.parseInt("11111111", 2)); } }
B 带宽
本题总分:5 分
问题描述
小蓝家的网络带宽是 200 Mbps,请问,使用小蓝家的网络理论上每秒钟最多可以从网上下载多少 MB 的内容。
答案提交
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
package action; public class demo { public static void main(String[] args) { System.out.println(200/8); } }
C、纯质数
本题总分:10 分
问题描述
如果一个正整数只有 1和它本身两个约数,则称为一个质数(又称素数)。
前几个质数是:2,3,5,7,11,13,17,19,23,29,31,37,⋅⋅⋅ 。
如果一个质数的所有十进制数位都是质数,我们称它为纯质数。例如:2,3,5,7,23,37 都是纯质数,而 11,13,17,19,29,31 不是纯质数。当然1,4,35 也不是纯质数。
请问,在 1 到 20210605 中,有多少个纯质数?
答案提交
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
package action; public class demo { public static void main(String[] args) { long out = 0;// 记录总个数 for (int i = 1; i <= 20210605; i++) { if ((i + "").indexOf("1") == -1 && (i + "").indexOf("4") == -1 && (i + "").indexOf("6") == -1 && // 首先判断当前数字中不能包含非质数数字 (i + "").indexOf("8") == -1 && (i + "").indexOf("9") == -1 && (i + "").indexOf("0") == -1) { if (f(i)) { // 判断是否是质数 out++; // System.out.println(i); } } if (i % 10000 == 0) { System.out.println(i);// 观察程序运行进度 } } System.out.println(out);// 最后结果 } // 判断是否是质数 private static boolean f(int num) { for (int i = 2; i < num / 2; i++) { if (num % i == 0) { return false; } } return true; } }
D 完全日期
本题总分:10 分
问题描述
如果一个日期中年月日的各位数字之和是完全平方数,则称为一个完全日期。
例如:2021 年 6 月 5 日的各位数字之和为 2+0+2+1+6+5=16,而 16 是一个完全平方数,它是 4 的平方。所以 2021 年 6 月 5 日是一个完全日期。
例如:2021 年 6 月 23 日的各位数字之和为 2+0+2+1+6+2+3=16,是一个完全平方数。所以 2021 年 6 月 23 日也是一个完全日期。
请问,从 2001 年 1 月 1 日到 2021 年 12 月 31 日中,一共有多少个完全日期?
答案提交
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
package action; import java.util.Calendar; public class demo { public static void main(String[] args) { long out = 0;// 记录总个数 Calendar n = Calendar.getInstance(); n.clear(); for (int i = 2001; i < 2022; i++) {// 年份 for (int j = 1; j <= 12; j++) {// 月份 n.set(i, j - 1, 1); int max = n.getActualMaximum(Calendar.DAY_OF_MONTH);// 获取当前月份最大天数 for (int k = 1; k <= max; k++) {// 日 // System.out.println(i+""+j+""+k); if (f(Integer.parseInt(i + "" + j + "" + k))) { out++; } } } } System.out.println(out);// 最后结果 } // 判断是否是完全日期 private static boolean f(int num) { int n = 0; while (num > 0) { n += num % 10; num /= 10; } if (n == 4 || n == 9 || n == 16 || n == 25) {// 满足当前范围内日期的完全平方数只有4 9 16 25无需判断其余数字 return true; } return false; } }
E、最小权值
本题总分:15 分
问题描述
对于一棵有根二叉树 T ,小蓝定义这棵树中结点的权值 W(T) 如下:
空子树的权值为 0 。
如果一个结点 v 有左子树 L , 右子树 R ,分别有 C(L) 和 C(R) 个结点,则 W(v)=1+2W(L)+3W(R)+(C(L))^2C(R)。(^2代表平方)
树的权值定义为树的根结点的权值。
小蓝想知道,对于一棵有 2021 个结点的二叉树,树的权值最小可能是多少?
答案提交
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
package action; public class demo { static int n = 2021; public static void main(String[] args) { f(); } public static void f() { long[] dp = new long[n + 1]; dp[1] = 1; for (int i = 2; i <= n; ++i) { long min = Long.MAX_VALUE; for (int l = 0; l <= i - 1; ++l) { int r = i - l - 1; long p = 1 + 2 * dp[l] + 3 * dp[r] + l * l * r; min = Math.min(min, p); } dp[i] = min; } System.out.println(dp[n]); } }