zoukankan      html  css  js  c++  java
  • PAT——1069. 微博转发抽奖

    小明PAT考了满分,高兴之余决定发起微博转发抽奖活动,从转发的网友中按顺序每隔N个人就发出一个红包。请你编写程序帮助他确定中奖名单。

    输入格式:

    输入第一行给出三个正整数M(<= 1000)、N和S,分别是转发的总量、小明决定的中奖间隔、以及第一位中奖者的序号(编号从1开始)。随后M行,顺序给出转发微博的网友的昵称(不超过20个字符、不包含空格回车的非空字符串)。

    注意:可能有人转发多次,但不能中奖多次。所以如果处于当前中奖位置的网友已经中过奖,则跳过他顺次取下一位。

    输出格式:

    按照输入的顺序输出中奖名单,每个昵称占一行。如果没有人中奖,则输出“Keep going...”。

    输入样例1:

    9 3 2
    Imgonnawin!
    PickMe
    PickMeMeMeee
    LookHere
    Imgonnawin!
    TryAgainAgain
    TryAgainAgain
    Imgonnawin!
    TryAgainAgain
    

    输出样例1:

    PickMe
    Imgonnawin!
    TryAgainAgain
    

    输入样例2:

    2 3 5
    Imgonnawin!
    PickMe
    

    输出样例2:

    Keep going...

     1 package com.hone.basical;
     2 
     3 import java.util.ArrayList;
     4 import java.util.List;
     5 import java.util.Scanner;
     6 /**
     7  * 原题目:https://www.patest.cn/contests/pat-b-practise/1069
     8  * @author Xia
     9  * 
    10  * 这道题目有一个陷阱的地方:"注意:可能有人转发多次,但不能中奖多次。
    11  * 所以如果处于当前中奖位置的网友已经中过奖,则跳过他顺次取下一位。"
    12  * 上面说一次选取下一位,假如下一位和刚才中奖的又相同呢?
    13  * 所以,必须在接下来检测,是否已经得过奖,如果得过奖,则继续往下遍历。
    14  */
    15 
    16 public class basicalLevel1069weiboLottery {
    17 
    18     public static void main(String[] args) {
    19         Scanner in = new Scanner(System.in);
    20         int m = in.nextInt();            //转发总量
    21         int n = in.nextInt();            //中奖间隔
    22         int s = in.nextInt();            //第一位中奖者的编号
    23         in.nextLine();
    24         List<String> hasyes = new ArrayList<>();
    25         String[] nc = new String[m];        //nc用于保存所有网友的昵称
    26         
    27         for (int i = 0; i < m; i++) {
    28             nc[i] = in.nextLine();
    29         }
    30         int flag = 1;
    31         
    32         for (int i = s-1; i < nc.length; i+=n) {
    33             if (!hasyes.contains(nc[i])) {
    34                 hasyes.add(nc[i]);
    35                 System.out.println(nc[i]);
    36                 flag = 0;
    37             }else {
    38                 //用一个for循环的原因防止后面的元素都相同
    39                 for (int j = i+1; j < nc.length; j++) {
    40                     if (!hasyes.contains(nc[j])) {
    41                         System.out.println(nc[j]);
    42                         i = j;
    43                         break;
    44                     }else {
    45                         i = j;
    46                     }
    47                 }
    48             }
    49         }
    50         if (flag == 1) {
    51             System.out.println("Keep going...");
    52         }
    53     }
    54 }



  • 相关阅读:
    新闻发布项目——Servlet类(doRegServlet )
    新闻发布项目——Servlet类(doNewsModifyServlet )
    新闻发布项目——Servlet类(doNewsModifyServlet )
    新闻发布项目——Servlet类(doNewsModifyServlet )
    and or 逻辑组合
    sqoop
    t
    tmp
    临时表 数据在 内存 转移时间 将160秒的创建临时表时间放入定时任务 不到1秒的求和时间 hadoop 引入Hadoop 分布式计算
    /tmp/crontab.tDoyrp: 设备上没有空间 查看文件夹所在分区 磁盘剩余空间 15g的root-mail大文件
  • 原文地址:https://www.cnblogs.com/xiaxj/p/8005661.html
Copyright © 2011-2022 走看看