• 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 }



  • 相关阅读:
    SQL Server中出现用户或角色在当前数据库已经存在的问题的解决
    vs项目中添加lib库的方法总结
    【转载】C++ Socket通信总结(附C++实现)
    【转载】windows socket函数详解
    如何在 Debian 9 下安装 LEMP 和 WHMCS 7.5
    13个云计算基础设施自动化的最佳工具
    5分钟打造一个前端性能监控工具
    我的处女作——设计模式之状态模式
    IOS逆向分析笔记——replay逆向分析
    IOS逆向分析——GL脚本的提取
  • 原文地址:https://www.cnblogs.com/xiaxj/p/8005661.html
Copyright © 2020-2023  润新知