2020全国高校计算机能力挑战赛决赛Java组

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));
    }
}

五、公交车路线最短路径

在这里插入图片描述

# 没写出来,写出来的大佬可以评论区留下,谢谢

六、仓库大米组合

在这里插入图片描述

# 没写出来,写出来的大佬可以评论区留下,谢谢
  • 比赛时间紧张,仅仅是为了实现功能,没来得及优化!!!
  • 还欠却很多数据结构和算法的知识!!!
  • 后面继续学习!加油!!!

猜你喜欢

转载自blog.csdn.net/weixin_43482906/article/details/111465889