博客
关于我
PAT——1059. C语言竞赛
阅读量:463 次
发布时间:2019-03-06

本文共 2460 字,大约阅读时间需要 8 分钟。

为了解决这个问题,我们需要根据参赛者的排名和查询结果,确定他们应该获得的奖品。参赛者根据排名获得不同的奖品:冠军获得“神秘大奖”,排名为素数的获得“小黄人”,其他人获得巧克力。如果查询的ID不在排名中,则输出“耍我呢?”。如果ID已经被查过,则输出“不能多吃多占”。

方法思路

  • 读取输入:首先读取参赛人数N,然后读取N个参赛者的ID,接着读取查询人数K和K个查询的ID。
  • 存储参赛者ID:将参赛者的ID存储在一个数组中。
  • 处理查询:对于每个查询的ID,检查它是否存在于参赛者排名中。如果不存在,输出“耍我呢?”。如果存在,检查是否已经被处理过。如果是新处理的,根据排名判断奖品:
    • 第一个参赛者获得“神秘大奖”。
    • 排名为素数的参赛者获得“小黄人”。
    • 其他参赛者获得巧克力。
  • 素数判断:编写一个函数来判断一个数是否为素数。
  • 解决代码

    import java.util.Scanner;public class BasicalLevel1059CproCompition {    public static void main(String[] args) {        Scanner in = new Scanner(System.in);        int N = Integer.parseInt(in.nextLine());        String[] a = new String[N];        for (int i = 0; i < N; i++) {            a[i] = in.nextLine();        }        int K = Integer.parseInt(in.nextLine());        boolean[] processed = new boolean[N];        for (int i = 0; i < K; i++) {            String m = in.nextLine();            int index = -1;            boolean found = false;            for (int j = 0; j < N; j++) {                if (m.equals(a[j])) {                    found = true;                    index = j;                    break;                }            }            if (!found) {                System.out.println(m + ": Are you kidding?");            } else {                if (processed[index]) {                    System.out.println(m + ": Checked");                } else {                    if (index == 0) {                        System.out.println(m + ": Mystery Award");                    } else {                        int rank = index + 1;                        if (isPrime(rank)) {                            System.out.println(m + ": Minion");                        } else {                            System.out.println(m + ": Chocolate");                        }                    }                    processed[index] = true;                }            }        }    }    private static boolean isPrime(int i) {        if (i <= 1) {            return false;        }        if (i == 2) {            return true;        }        if (i % 2 == 0) {            return false;        }        for (int j = 3; j <= Math.sqrt(i); j += 2) {            if (i % j == 0) {                return false;            }        }        return true;    }}

    代码解释

  • 读取输入:使用Scanner读取输入数据,首先读取参赛人数N,然后读取N个参赛者的ID。
  • 存储参赛者ID:将参赛者的ID存储在数组a中。
  • 处理查询:对于每个查询的ID,检查它是否存在在数组中。如果不存在,输出相应的结果。如果存在,检查是否已经被处理过。如果是新处理的,根据排名判断奖品。
  • 素数判断isPrime函数用于判断一个数是否为素数,用于判断排名是否为素数以决定奖品类型。
  • 这个方法确保了每个查询的ID都能得到正确的奖品判断,并且处理了重复查询和不存在的ID情况。

    转载地址:http://dnnbz.baihongyu.com/

    你可能感兴趣的文章
    Netty工作笔记0020---Selectionkey在NIO体系
    查看>>
    Vue踩坑笔记 - 关于vue静态资源引入的问题
    查看>>
    Netty工作笔记0025---SocketChannel API
    查看>>
    Netty工作笔记0027---NIO 网络编程应用--群聊系统2--服务器编写2
    查看>>
    Netty工作笔记0050---Netty核心模块1
    查看>>
    Netty工作笔记0060---Tcp长连接和短连接_Http长连接和短连接_UDP长连接和短连接
    查看>>
    Netty工作笔记0077---handler链调用机制实例4
    查看>>
    Netty工作笔记0084---通过自定义协议解决粘包拆包问题2
    查看>>
    Netty常见组件二
    查看>>
    netty底层源码探究:启动流程;EventLoop中的selector、线程、任务队列;监听处理accept、read事件流程;
    查看>>
    Netty核心模块组件
    查看>>
    Netty框架的服务端开发中创建EventLoopGroup对象时线程数量源码解析
    查看>>
    Netty源码—2.Reactor线程模型一
    查看>>
    Netty源码—4.客户端接入流程一
    查看>>
    Netty源码—4.客户端接入流程二
    查看>>
    Netty源码—5.Pipeline和Handler一
    查看>>
    Netty源码—6.ByteBuf原理二
    查看>>
    Netty源码—7.ByteBuf原理三
    查看>>
    Netty源码—7.ByteBuf原理四
    查看>>
    Netty源码—8.编解码原理二
    查看>>