2018 年我们曾经出过一题,是输出“2018 我们要赢”。今年是 2022 年,你要输出的句子变成了“我要赢!就在今天!”然后以比赛当天的日期落款。
本题没有输入。
输出分 2 行。在第一行中输出 I'm gonna win! Today!
,在第二行中用 年年年年-月月-日日
的格式输出比赛当天的日期。已知比赛的前一天是 2022-04-22
。
无
I'm gonna win! Today!
这一行的内容我不告诉你…… 你要自己输
public class Main {
public static void main(String[] args) {
System.out.printf("I'm gonna win! Today!\n" +
"2022-04-23");
}
}
2019年10月29日,中央电视台专题报道,中国科学院在培育钻石领域,取得科技突破。科学家们用金刚石的籽晶片作为种子,利用甲烷气体在能量作用下形成碳的等离子体,慢慢地沉积到钻石种子上,一周“种”出了一颗 1 克拉大小的钻石。
本题给出钻石的需求量和人工培育钻石的速度,请你计算出货需要的时间。
输入在一行中给出钻石的需求量 N(不超过 107 的正整数,以微克拉
为单位)和人工培育钻石的速度 v(1≤v≤200,以微克拉/天
为单位的整数)。
在一行中输出培育 N 微克拉钻石需要的整数天数。不到一天的时间不算在内。
102000 130
784
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String[] input = in.readLine().split(" ");
int n = Integer.parseInt(input[0]);
int v = Integer.parseInt(input[1]);
System.out.println(n / v);
}
}
为了保障安静的阅读环境,有些公共图书馆对儿童入馆做出了限制。例如“12 岁以下儿童禁止入馆,除非有 18 岁以上(包括 18 岁)的成人陪同”。现在有两位小/大朋友跑来问你,他们能不能进去?请你写个程序自动给他们一个回复。
输入在一行中给出 4 个整数:
禁入年龄线 陪同年龄线 询问者1的年龄 询问者2的年龄
这里的禁入年龄线
是指严格小于该年龄的儿童禁止入馆;陪同年龄线
是指大于等于该年龄的人士可以陪同儿童入馆。默认两个询问者的编号依次分别为 1
和 2
;年龄和年龄线都是 [1, 200] 区间内的整数,并且保证 陪同年龄线
严格大于 禁入年龄线
。
在一行中输出对两位询问者的回答,如果可以进就输出 年龄-Y
,否则输出 年龄-N
,中间空 1 格,行首尾不得有多余空格。
在第二行根据两个询问者的情况输出一句话:
qing X zhao gu hao Y
,其中 X
是陪同人的编号, Y
是小孩子的编号;huan ying ru guan
;zhang da zai lai ba
;X: huan ying ru guan
,其中 X
是可以入馆的那个人的编号。12 18 18 8
18-Y 8-Y
qing 1 zhao gu hao 2
12 18 10 15
10-N 15-Y
2: huan ying ru guan
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String[] input = in.readLine().split(" ");
int noAge = Integer.parseInt(input[0]);
int yesAge = Integer.parseInt(input[1]);
int askAge1 = Integer.parseInt(input[2]);
int askAge2 = Integer.parseInt(input[3]);
if (askAge1 >= noAge && askAge2 >= noAge) {
System.out.printf("%d-Y %d-Y\nhuan ying ru guan", askAge1, askAge2);
} else if (askAge1 >= yesAge && askAge2 < noAge) {
System.out.printf("%d-Y %d-Y\nqing 1 zhao gu hao 2", askAge1, askAge2);
} else if (askAge1 < noAge && askAge2 >= yesAge) {
System.out.printf("%d-Y %d-Y\nqing 2 zhao gu hao 1", askAge1, askAge2);
} else if (askAge1 < noAge && askAge2 < noAge) {
System.out.printf("%d-N %d-N\nzhang da zai lai ba", askAge1, askAge2);
} else if (askAge1 >= noAge) {
System.out.printf("%d-Y %d-N\n1: huan ying ru guan", askAge1, askAge2);
} else {
System.out.printf("%d-N %d-Y\n2: huan ying ru guan", askAge1, askAge2);
}
}
}
你的外星人朋友不认得地球上的加减乘除符号,但是会算阶乘 —— 正整数 N 的阶乘记为 “N!”,是从 1 到 N 的连乘积。所以当他不知道“5+7”等于多少时,如果你告诉他等于“12!”,他就写出了“479001600”这个答案。
本题就请你写程序模仿外星人的行为。
输入在一行中给出两个正整数 A 和 B。
在一行中输出 (A+B) 的阶乘。题目保证 (A+B) 的值小于 12。
3 6
362880
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String[] input = in.readLine().split(" ");
int a = Integer.parseInt(input[0]);
int b = Integer.parseInt(input[1]);
int sum = a + b;
int ans = 1;
for (int i = 1; i <= sum; i++) {
ans *= i;
}
System.out.println(ans);
}
}
我们知道一个骰子有 6 个面,分别刻了 1 到 6 个点。下面给你 6 个骰子的初始状态,即它们朝上一面的点数,让你一把抓起摇出另一套结果。假设你摇骰子的手段特别精妙,每次摇出的结果都满足以下两个条件:
那么你应该可以预知自己第 n 次(1≤n≤5)摇出的结果。
输入第一行给出 6 个骰子的初始点数,即 [1,6] 之间的整数,数字间以空格分隔;第二行给出摇的次数 n(1≤n≤5)。
在一行中顺序列出第 n 次摇出的每个骰子的点数。数字间必须以 1 个空格分隔,行首位不得有多余空格。
3 6 5 4 1 4
3
4 3 3 3 4 3
这 3 次摇出的结果依次为:
6 5 6 6 6 6
5 4 4 5 5 5
4 3 3 3 4 3
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String[] input = in.readLine().split(" ");
int n = Integer.parseInt(in.readLine());
int[][] map = new int[7][7];
for (int i = 1; i < 7; i++) {
map[i][Integer.parseInt(input[i - 1])] = 1;
}
int[] ans = new int[7];
for (int i = 0; i < n; i++) {
for (int j = 1; j < 7; j++) {
for (int k = 6; k > 0; k--) {
if (map[j][k] != 1) {
map[j][k] = 1;
ans[j] = k;
break;
}
}
}
}
StringBuilder sb = new StringBuilder();
for (int i = 1; i < ans.length; i++) {
if (i > 1) sb.append(" ");
sb.append(ans[i]);
}
System.out.println(sb);
}
}
上图是新浪微博上的一则趣闻,是瑞典斯德哥尔摩火车上的一道题,看上去是段伪代码:
s = ''
a = '1112031584'
for (i = 1; i < length(a); i++) {
if (a[i] % 2 == a[i-1] % 2) {
s += max(a[i], a[i-1])
}
}
goto_url('www.multisoft.se/' + s)
其中字符串的 +
操作是连接两个字符串的意思。所以这道题其实是让大家访问网站 www.multisoft.se/112358
(注意:比赛中千万不要访问这个网址!!!)。
当然,能通过上述算法得到 112358
的原始字符串 a
是不唯一的。本题就请你判断,两个给定的原始字符串,能否通过上述算法得到相同的输出?
输入为两行仅由数字组成的非空字符串,长度均不超过 104,以回车结束。
对两个字符串分别采用上述斯德哥尔摩火车上的算法进行处理。如果两个结果是一样的,则在一行中输出那个结果;否则分别输出各自对应的处理结果,每个占一行。题目保证输出结果不为空。
1112031584
011102315849
112358
111203158412334
12341112031584
1123583
112358
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
static String f(char[] chars) {
int length = chars.length;
StringBuilder sb = new StringBuilder();
for (int i = 1; i < length; i++) {
int newValue = chars[i] - '0';
int oldValue = chars[i - 1] - '0';
if (newValue % 2 == oldValue % 2) {
sb.append(Math.max(newValue, oldValue));
}
}
return sb.toString();
}
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
char[] chars1 = in.readLine().toCharArray();
char[] chars2 = in.readLine().toCharArray();
String f1 = f(chars1);
String f2 = f(chars2);
if (f1.equals(f2)) {
System.out.println(f1);
}else {
System.out.println(f1);
System.out.println(f2);
}
}
}
在 MMORPG《最终幻想14》的副本“乐欲之所瓯博讷修道院”里,BOSS 机工士姆斯塔迪奥将会接受玩家的挑战。
你需要处理这个副本其中的一个机制:N×M 大小的地图被拆分为了 N×M 个 1×1 的格子,BOSS 会选择若干行或/及若干列释放技能,玩家不能站在释放技能的方格上,否则就会被击中而失败。
给定 BOSS 所有释放技能的行或列信息,请你计算出最后有多少个格子是安全的。
输入第一行是三个整数 N,M,Q (1≤N×M≤105,0≤Q≤1000),表示地图为 N 行 M 列大小以及选择的行/列数量。
接下来 Q 行,每行两个数 T**i,C**i,其中 T**i=0 表示 BOSS 选择的是一整行,T**i=1 表示选择的是一整列,C**i 为选择的行号/列号。行和列的编号均从 1 开始。
输出一个数,表示安全格子的数量。
5 5 3
0 2
0 4
1 3
12
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String[] input = in.readLine().split(" ");
int n = Integer.parseInt(input[0]);
int m = Integer.parseInt(input[1]);
int q = Integer.parseInt(input[2]);
int[][] map = new int[n + 1][m + 1];
for (int i = 0; i < q; i++) {
input = in.readLine().split(" ");
int t = Integer.parseInt(input[0]);
int c = Integer.parseInt(input[1]);
if (t == 0) {
for (int j = 1; j <= m; j++) {
map[c][j] = 1;
}
} else {
for (int j = 1; j <= n; j++) {
map[j][c] = 1;
}
}
}
int cnt = 0;
for (int i = 1; i < map.length; i++) {
for (int j = 1; j < map[i].length; j++) {
if (map[i][j] != 1) cnt++;
}
}
System.out.println(cnt);
}
}
天梯赛结束后,某企业的人力资源部希望组委会能推荐一批优秀的学生,这个整理推荐名单的任务就由静静姐负责。企业接受推荐的流程是这样的:
给定全体参赛学生的成绩和他们的 PAT 考试成绩,请你帮静静姐算一算,她最多能向企业推荐多少学生?
输入第一行给出 3 个正整数:N(≤105)为参赛学生人数,K(≤5×103)为企业接受的推荐批次,S(≤100)为该企业的 PAT 面试分数线。
随后 N 行,每行给出两个分数,依次为一位学生的天梯赛分数(最高分 290)和 PAT 分数(最高分 100)。
在一行中输出静静姐最多能向企业推荐的学生人数。
10 2 90
203 0
169 91
175 88
175 0
175 90
189 0
189 0
189 95
189 89
256 100
8
第一批可以选择 175、189、203、256 这四个分数的学生各一名,此外 175 分 PAT 分数达到 90 分的学生和 189 分 PAT 分数达到 95 分的学生可以额外进入名单。第二批就只剩下 175、189 两个分数的学生各一名可以进入名单了。最终一共 8 人进入推荐名单。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StreamTokenizer;
import java.util.ArrayList;
import java.util.List;
public class Main {
static StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
static int nextInt() throws IOException {
in.nextToken();
return (int) in.nval;
}
public static void main(String[] args) throws IOException {
int N = nextInt();
int K = nextInt();
int S = nextInt();
List<Student> list = new ArrayList<>();
for (int i = 0; i < N; i++) {
int gplt = nextInt();
int pat = nextInt();
if (gplt >= 175) list.add(new Student(gplt, pat));
}
list.sort(null);
int cnt = 0;
for (int i = 0; i < K; i++) {
int temp = 101;
for (int j = list.size() - 1; j >= 0; j--) {
Student student = list.get(j);
if (temp != student.gplt) {
cnt++;
temp = student.gplt;
list.remove(j);
} else if (student.pat >= S) {
cnt++;
list.remove(j);
}
}
}
System.out.println(cnt);
}
}
class Student implements Comparable<Student> {
int gplt;
int pat;
public Student(int gplt, int pat) {
this.gplt = gplt;
this.pat = pat;
}
@Override
public int compareTo(Student o) {
int r = o.gplt - this.gplt;
if (r == 0) r = o.pat - this.pat;
return r;
}
}
新浪微博上有人发了某老板的作息时间表,表示其每天 4:30 就起床了。但立刻有眼尖的网友问:这时间表不完整啊,早上九点到下午一点干啥了?
本题就请你编写程序,检查任意一张时间表,找出其中没写出来的时间段。
输入第一行给出一个正整数 N,为作息表上列出的时间段的个数。随后 N 行,每行给出一个时间段,格式为:
hh:mm:ss - hh:mm:ss
其中 hh
、mm
、ss
分别是两位数表示的小时、分钟、秒。第一个时间是开始时间,第二个是结束时间。题目保证所有时间都在一天之内(即从 00:00:00 到 23:59:59);每个区间间隔至少 1 秒;并且任意两个给出的时间区间最多只在一个端点有重合,没有区间重叠的情况。
按照时间顺序列出时间表中没有出现的区间,每个区间占一行,格式与输入相同。题目保证至少存在一个区间需要输出。
8
13:00:00 - 18:00:00
00:00:00 - 01:00:05
08:00:00 - 09:00:00
07:10:59 - 08:00:00
01:00:05 - 04:30:00
06:30:00 - 07:10:58
05:30:00 - 06:30:00
18:00:00 - 19:00:00
04:30:00 - 05:30:00
07:10:58 - 07:10:59
09:00:00 - 13:00:00
19:00:00 - 23:59:59
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import static java.lang.Integer.parseInt;
public class Main {
static class Time implements Comparable<Time> {
String start;
String end;
public Time(String start, String end) {
this.start = start;
this.end = end;
}
@Override
public int compareTo(Time o) {
return this.start.compareTo(o.start);
}
}
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
int n = parseInt(in.readLine());
List<Time> list = new ArrayList<>();
for (int i = 0; i < n; i++) {
String[] input = in.readLine().split(" - ");
list.add(new Time(input[0], input[1]));
}
in.close();
list.sort(null);
StringBuilder sb = new StringBuilder();
if (!list.get(0).start.equals("00:00:00")) {
sb.append("00:00:00 - ").append(list.get(0).start).append("\n");
}
int size = list.size();
for (int i = 1; i < size; i++) {
String e1 = list.get(i - 1).end;
String s2 = list.get(i).start;
if (!e1.equals(s2)) {
sb.append(list.get(i - 1).end).append(" - ").append(list.get(i).start).append("\n");
}
}
if (!list.get(size - 1).end.equals("23:59:59")) {
sb.append(list.get(size - 1).end).append(" - 23:59:59");
}
System.out.print(sb);
}
}