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 }



  • 相关阅读:
    LeetCode120 Triangle
    LeetCode119 Pascal's Triangle II
    LeetCode118 Pascal's Triangle
    LeetCode115 Distinct Subsequences
    LeetCode114 Flatten Binary Tree to Linked List
    LeetCode113 Path Sum II
    LeetCode112 Path Sum
    LeetCode111 Minimum Depth of Binary Tree
    Windows下搭建PHP开发环境-WEB服务器
    如何发布可用于azure的镜像文件
  • 原文地址:https://www.cnblogs.com/xiaxj/p/8005661.html
Copyright © 2011-2022 走看看