试题 A: 约数个数
本题总分:5 分
【问题描述】
对于一个整数,能整除这个整数的数称为这个数的约数。
例如:1, 2, 3, 6 都是 6 的约数。
请问 78120 有多少个约数。
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
【题解】
答案 :96
遍历一遍所有小于等于78120的数得了
public class Main {
public static void main(String[] args) {
int cut = 0;
for (int i = 1; i <= 78120; i++) {
if (78120 % i == 0) cut ++;
}
System.out.println(cut);
}
}
试题 B: 寻找 2020
本题总分:5 分
【问题描述】
小蓝有一个数字矩阵,里面只包含数字 0 和 2。小蓝很喜欢 2020,他想找到这个数字矩阵中有多少个 2020 。
小蓝只关注三种构成 2020 的方式:
- 同一行里面连续四个字符从左到右构成 2020。
- 同一列里面连续四个字符从上到下构成 2020。
- 在一条从左上到右下的斜线上连续四个字符,从左上到右下构成 2020。
例如,对于下面的矩阵:
220000
000000
002202
000000
000022
002020
一共有 5 个 2020。其中 1 个是在同一行里的,1 个是在同一列里的,3 个是斜线上的。
小蓝的矩阵比上面的矩阵要大,由于太大了,他只好将这个矩阵放在了一个文件里面,在试题目录下有一个文件 2020.txt,里面给出了小蓝的矩阵。
请帮助小蓝确定在他的矩阵中有多少个 2020。
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
【题解】
答案:16520
import java.io.BufferedReader;
import java.io.FileReader;
public class Main {
public static void main(String[] args) throws Exception {
//缓冲流读入文件,后面路径看你放在哪个位置了
BufferedReader br = new BufferedReader(new FileReader("src/2020.txt"));
String s = null;
char[][] a = new char[300][];
int in = 0;
while ((s = br.readLine()) != null) {
a[in] = s.toCharArray();
in ++;
}
//定义方向,右,下,右下
int[][] dir = {{0, 1}, {1, 0}, {1, 1}};
//cut存储2020个数
int cut = 0;
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < a[i].length; j++) {
if (a[i][j] != '2') continue;
for (int k = 0; k < dir.length; k++) {
//向三个方向延伸
int temp = 2;
int x = i, y = j;
for (int l = 0; l < 3; l++) {
x += dir[k][0];
y += dir[k][1];
//处理一下边界
if (x >= a.length || y >= a[x].length) break;
//拼接数字
temp = temp * 10 + a[x][y] - '0';
}
//计算出每个方向的值比对
if (temp == 2020) {
cut ++;
}
}
}
}
System.out.println(cut);
}
}
试题 C: 跑步锻炼
本题总分:10 分
【问题描述】
小蓝每天都锻炼身体。
正常情况下,小蓝每天跑 1 千米。如果某天是周一或者月初(1 日),为了激励自己,小蓝要跑 2 千米。如果同时是周一或月初,小蓝也是跑 2 千米。
小蓝跑步已经坚持了很长时间,从 2000 年 1 月 1 日周六(含)到 2020 年10 月 1 日周四(含)。请问这段时间小蓝总共跑步多少千米?
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
【题解】
答案:8879
public class Main {
public static void main(String[] args) {
int[] week = {1,2,3,4,5,6,7};
int weeki = 5;
int[] date = {2000,0,0}; //为了方便处理,月份和日都从0开始
int sum = 0; //存储这20年跑步的总和
while (true) {
int year = date[0];
int month = date[1];
int day = date[2];
//打印日期,测试日期是否进入正轨
System.out.println(year+"年"+(month+1)+"月"+(day+1)+"日");
int s = 1;
if (week[weeki] == 1 || day == 0) {
s = 2;
}
sum += s;
if (year == 2020 && month == 9 && day == 0) {
break;
}
weeki = (weeki + 1) % 7;
//对于月份和日份构成循环
date[2] = (day + 1) % getDayOfMonth(year,month);
date[1] = (month + (day + 1) / getDayOfMonth(year,month)) % 12;
//月份由12月变成1月时年份+1
if (month == 11 && date[1] == 0) date[0] ++;
}
System.out.println(sum);
}
private static int getDayOfMonth(int year,int month) {
switch (month) {
case 0:
case 2:
case 4:
case 6:
case 7:
case 9:
case 11:
return 31;
case 3:
case 5:
case 8:
case 10:
return 30;
case 1:
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
return 29;
}
return 28;
}
return 0;
}
}
试题 D: 平面分割
本题总分:10 分
【问题描述】
20 个圆和 20 条直线最多能把平面分成多少个部分?
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
【题解】
答案:1372
package com.cxyax.shengsai;
public class Main4 {
public static void main(String[] args) {
int n = 2;
for(int i = 1; i < 20;i++) {
n += 2 * i;
}
// System.out.println(n);
for(int i = 1;i <= 20;i++) {
n+=39; //与圆有几个焦点,就有多焦点-1个区域
n+=i; //直线在圆外面增肌按区域数量
}
System.out.println(n);
}
}
试题 E: 七段码
本题总分:15 分
【问题描述】
小蓝要用七段码数码管来表示一种特殊的文字。
上图给出了七段码数码管的一个图示,数码管中一共有 7 段可以发光的二极管,分别标记为 a, b, c, d, e, f, g。
小蓝要选择一部分二极管(至少要有一个)发光来表达字符。在设计字符的表达时,要求所有发光的二极管是连成一片的。
- 例如:b 发光,其他二极管不发光可以用来表达一种字符。
- 例如:c 发光,其他二极管不发光可以用来表达一种字符。这种方案与上
一行的方案可以用来表示不同的字符,尽管看上去比较相似。
- 例如:a, b, c, d, e 发光,f, g 不发光可以用来表达一种字符。
- 例如:b, f 发光,其他二极管不发光则不能用来表达一种字符,因为发光的二极管没有连成一片。
请问,小蓝可以用七段码数码管表达多少种不同的字符?
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
【题解】
答案:80
import java.util.ArrayList;
import java.util.HashSet;
public class Main {
//res存储灯管显示方式
static HashSet<HashSet<Character>> res = new HashSet<>();
public static void main(String[] args) {
//存储所有灯管的连接关系
ArrayList<G> list = new ArrayList<>();
list.add(new G('a', 'b'));
list.add(new G('a', 'f'));
list.add(new G('c', 'b'));
list.add(new G('g', 'b'));
list.add(new G('c', 'd'));
list.add(new G('c', 'g'));
list.add(new G('e', 'd'));
list.add(new G('e', 'g'));
list.add(new G('e', 'f'));
list.add(new G('f', 'g'));
dfs(list,new ArrayList<G>(),0);
//结果加上7,是因为有七种方式只有一个灯管,不与其他灯管相连
System.out.println(res.size() + 7);
}
/*
深搜所有灯管连接的子集
*/
private static void dfs(ArrayList<G> list, ArrayList<G> gs, int i) {
if (i == list.size()) {
HashSet<Character> ds = new HashSet<>();
//ds获得gs里面所有的灯管
for (int j = 0; j < gs.size(); j++) {
ds.add(gs.get(j).start);
ds.add(gs.get(j).end);
}
//当灯管的数量比连接的数量多1,表示所有的灯管连在一起
if (ds.size() - 1 == gs.size()) {
res.add(ds);
}
return;
}
dfs(list, gs, i + 1);
gs.add(list.get(i));
dfs(list, gs, i + 1);
gs.remove(list.get(i));
}
}
/*
类名懒得想,就这样写个G吧
该类表示哪两个灯管连着
*/
class G {
char start;
char end;
public G (char start, char end) {
this.start = start;
this.end = end;
}
}
试题 F: 成绩统计
时间限制: 1.0s 内存限制: 512.0MB
本题总分:15 分
【问题描述】
小蓝给学生们组织了一场考试,卷面总分为 100 分,每个学生的得分都是一个 0 到 100 的整数。
如果得分至少是 60 分,则称为及格。如果得分至少为 85 分,则称为优秀。
请计算及格率和优秀率,用百分数表示,百分号前的部分四舍五入保留整数。
【输入格式】
输入的第一行包含一个整数 n,表示考试人数。
接下来 n 行,每行包含一个 0 至 100 的整数,表示一个学生的得分。
【输出格式】
输出两行,每行一个百分数,分别表示及格率和优秀率。百分号前的部分四舍五入保留整数。
【样例输入】
7
80
92
56
74
88
100
0
【样例输出】
71%
43%
版权声明:未标注转载均为本站原创,转载时请以链接形式注明文章出处。如有侵权、不妥之处,请联系站长删除。敬请谅解!