2020全国高校计算机能力挑战赛决赛Java组
- 本来就是抱着试试看的心态参加这个比赛,没想到进了决赛,但是最近考试复习也比较忙,没来及准备比赛,决赛题目难度还好,但是5,6两题没做出来,后面要在学习学习数据结构和算法了。
- 下面我把题目贴出来给大家参考一下,也顺便把写的4题也贴出来。
一、自助结账
实现:
import java.text.DecimalFormat;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int N = in.nextInt();
double sum = 0;
int R = 0;
boolean flag = false;
for (int i = 0; i < N; i++) {
String type = in.next();
int zl = in.nextInt();
double dj = in.nextDouble() / 100;
if (type.equals("R")) {
if (R < 200) {
if ((R + zl) <= 200) {
R += zl;
} else {
sum = sum + (R + zl - 200) * dj;
}
} else {
sum += dj * zl;
}
} else {
sum += dj * zl;
}
}
int bu = in.nextInt();
if (bu >= 6000 & bu < 10000) {
sum *= 0.9;
} else if (bu >= 10000) {
sum *= 0.8;
}
DecimalFormat df = new DecimalFormat("0.00 ");
System.out.println(df.format(sum));
in.close();
}
}
二、按规则产生序列
(这一题写的很烂,当时只是为了在比赛时间内实现)
实现:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int a1 = in.nextInt();
int a2 = in.nextInt();
int N = 17;
int i = 2;
int[] arr = new int[N];
arr[0] = a1;
arr[1] = a2;
while (i <= 15) {
int temp = arr[i - 1] * arr[i - 2];
if (temp < 10000) {
arr[i] = temp;
i++;
} else {
arr[i] = temp % 10000;
i++;
arr[i] = temp / 10000;
i++;
}
}
for (int j = 2; j < 12; j++) {
System.out.print(arr[j] + " ");
}
}
}
三、先分组,再排序
实现:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int N = in.nextInt();
int K = in.nextInt();
int[] arr = new int[N];
int[] arrak = new int[K];
int[] arrzk = new int[N - K];
for (int i = 0; i < arr.length; i++) {
arr[i] = in.nextInt();
}
for (int i = 0; i < arrak.length; i++) {
arrak[i] = arr[i];
}
for (int i = 0; i < arrak.length; i++) {
for (int j = 0; j < arrak.length - 1; j++) {
if (arrak[j] > arrak[j + 1]) {
int temp = arrak[j];
arrak[j] = arrak[j + 1];
arrak[j + 1] = temp;
}
}
}
for (int i = 0; i < arrzk.length; i++) {
arrzk[i] = arr[K + i];
}
for (int i = 0; i < arrzk.length; i++) {
for (int j = 0; j < arrzk.length - 1; j++) {
if (arrzk[j] < arrzk[j + 1]) {
int temp = arrzk[j];
arrzk[j] = arrzk[j + 1];
arrzk[j + 1] = temp;
}
}
}
int ban1 = 0;
if (arrak.length % 2 == 1) {
ban1 = arrak.length / 2 + 1;
} else {
ban1 = arrak.length / 2;
}
for (int i = ban1; i < arrak.length; i++) {
for (int j = ban1; j < arrak.length - 1; j++) {
if (arrak[j] < arrak[j + 1]) {
int temp = arrak[j];
arrak[j] = arrak[j + 1];
arrak[j + 1] = temp;
}
}
}
int ban2 = 0;
if (arrzk.length % 2 == 1) {
ban2 = arrzk.length / 2 + 1;
} else {
ban2 = arrzk.length / 2;
}
for (int i = 0; i < ban2; i++) {
for (int j = 0; j < ban2 - 1; j++) {
if (arrzk[j] > arrzk[j + 1]) {
int temp = arrzk[j];
arrzk[j] = arrzk[j + 1];
arrzk[j + 1] = temp;
}
}
}
for (int i = 0; i < arrak.length; i++) {
System.out.print(arrak[i] + " ");
}
for (int i = 0; i < arrzk.length; i++) {
System.out.print(arrzk[i] + " ");
}
in.close();
}
}
四、单链表
实现:
import java.util.LinkedList;
import java.util.Scanner;
public class Main {
public static void main(String[] args) throws Exception {
LinkedList<String> list = new LinkedList();
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
String s1 = sc.nextLine();
String[] split = s.split("]");
for (int i = 0; i < split.length; i++) {
if (!"".equals(split[i])) {
String substring = split[i];
int i1 = substring.indexOf('[');
substring = split[i].substring(i1 + 1);
String[] split1 = substring.split("->");
String s2 = split1[0];
String s3 = split1[1];
if (!list.contains(s2)) {
list.addLast(s2);
}
if (!list.contains(s3)) {
list.addLast(s3);
}
}
}
int index = -1;
for (int i = 0; i < list.size(); i++) {
if (s1.equals(list.get(i))) {
index = i;
}
}
int size = list.size();
System.out.println((index) + " " + (size - index - 1));
}
}
五、公交车路线最短路径
# 没写出来,写出来的大佬可以评论区留下,谢谢
六、仓库大米组合
# 没写出来,写出来的大佬可以评论区留下,谢谢
- 比赛时间紧张,仅仅是为了实现功能,没来得及优化!!!
- 还欠却很多数据结构和算法的知识!!!
- 后面继续学习!加油!!!