A、求和
试题 A: 求和
本题总分:5 分
【问题描述】
小明对数位中含有 2、0、1、9 的数字很感兴趣,在 1 到 40 中这样的数包
括 1、2、9、10 至 32、39 和 40,共 28 个,他们的和是 574。
请问,在 1 到 2019 中,所有这样的数的和是多少?
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一
个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
题解:
package action; public class demo { public static void main(String[] args) { int sum = 0; for (int i = 0; i <= 2019; i++) { // 将数字转换为字符串 String str = String.valueOf(i); if (str.contains("2") || str.contains("0") || str.contains("1") ||str.contains("9")) { sum += i; } } System.out.println(sum); } }
B、矩形切割
试题 B: 矩形切割
本题总分:5 分
【问题描述】
小明有一些矩形的材料,他要从这些矩形材料中切割出一些正方形。
当他面对一块矩形材料时,他总是从中间切割一刀,切出一块最大的正方
形,剩下一块矩形,然后再切割剩下的矩形材料,直到全部切为正方形为止。
例如,对于一块两边分别为 5 和 3 的材料(记为 5 × 3),小明会依次切出
3 × 3、2 × 2、1 × 1、1 × 1 共 4 个正方形。
现在小明有一块矩形的材料,两边长分别是 2019 和 324。请问小明最终会
切出多少个正方形?
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一
个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
题解:
package action; public class demo { public static void main(String[] args) { int x = 2019;//目标数据 int y = 324; System.out.println(f(x, y, 0)); } public static int f(int x, int y, int count) { if (x == 0 || y == 0) { return count; } if (x >= y) { return f((x - y), y, ++count); } else { return f(x, (y - x), ++count); } } }
C、不同子串
试题 C: 不同子串
本题总分:10 分
【问题描述】
一个字符串的非空子串是指字符串中长度至少为 1 的连续的一段字符组成
的串。例如,字符串aaab 有非空子串a, b, aa, ab, aaa, aab, aaab,一共 7 个。
注意在计算时,只算本质不同的串的个数。
请问,字符串0100110001010001 有多少个不同的非空子串?
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一
个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
题解:
package action; import java.util.HashSet; import java.util.Set; public class demo { public static void main(String[] args) { String str = "0100110001010001"; Set<String> set = new HashSet<String>(); for (int i = 0; i <= str.length(); i++) { for (int j = i+1; j <= str.length(); j++) { set.add(str.substring(i, j)); } } System.out.println(set.size()); } }
D、质数
试题 D: 质数
本题总分:10 分
【问题描述】
我们知道第一个质数是 2、第二个质数是 3、第三个质数是 5……请你计算
第 2019 个质数是多少?
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一
个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
题解:
package action; public class demo { public static void main(String[] args) { int count = 1; for (int i = 1; i <= 2019; i++) { for (int j = count + 1;; j++) { if (f(j)) { count = j; break; } } } System.out.println(count); } /** * 判断一个数是否是质数 * @param x * @return */ public static boolean f(int x) { if (x < 3) { return (x > 1); } for (int i = 2; i <= Math.sqrt(x); i++) { if (x % i == 0) { return false; } } return true; } }
E、最大降雨量
试题 E: 最大降雨量
本题总分:15 分
【问题描述】
由于沙之国长年干旱,法师小明准备施展自己的一个神秘法术来求雨。
这个法术需要用到他手中的 49 张法术符,上面分别写着 1 至 49 这 49 个
数字。法术一共持续 7 周,每天小明都要使用一张法术符,法术符不能重复使
用。
每周,小明施展法术产生的能量为这周 7 张法术符上数字的中位数。法术
施展完 7 周后,求雨将获得成功,降雨量为 7 周能量的中位数。
由于干旱太久,小明希望这次求雨的降雨量尽可能大,请大最大值是多少?
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一
个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分
题解:
package action; public class demo { public static void main(String[] args) { System.out.println(49 - 16 + 1); } }