PAT 乙级 1069.微博转发抽奖 C++/Java

题目来源

小明 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...

 

思路:

对输入的每行字符串进行判断,符合条件的就添加到结果数组中。若当前输入已经在结果数组中能找到,就将s+1,把中奖的顺序往后移一位。

 

C++实现:

 1 #include <iostream>
 2 #include <vector>
 3 using namespace std;
 4 //1069:微博转发抽奖
 5 int main() {
 6     int m, n, s, num = 0;
 7     cin >> m >> n >> s;
 8     vector<string> person(m + 1);
 9     vector<string> res;
10     bool flag = false;
11     for (int i = 1; i <= m; i++) {
12         cin >> person[i];
13         for (int j = 0; j < res.size(); j++) {
14             if (person[i] == res[j]) {
15                 s++;
16             }
17         }
18         if (i == s) {
19             cout << person[i] << endl;
20             res.push_back(person[i]);
21             flag = true;
22             s += n;
23         }
24     }
25     if (!flag) {
26         cout << "Keep going..." << endl;
27     }
28     return 0;
29 }

 

 

Java实现:

 1 import java.io.BufferedReader;
 2 import java.io.IOException;
 3 import java.io.InputStreamReader;
 4 import java.util.ArrayList;
 5 import java.util.List;
 6 
 7 public class Main {
 8     public static void main(String[] args) throws IOException {
 9         BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
10         String[] str = in.readLine().split("\\s+");
11         int m = Integer.parseInt(str[0]);
12         int n = Integer.parseInt(str[1]);
13         int s = Integer.parseInt(str[2]);
14         //ArrayList 是可改变大小的数组
15         List<String>list = new ArrayList<>();   //创建ArrayList
16         boolean flag = false;
17         for (int i = 1; i <= m; i++) {
18             String get = in.readLine();
19             if(list.contains(get))
20                 s++;
21             if(i == s){
22                 System.out.println(get);
23                 list.add(get);
24                 flag = true;
25                 s += n;
26             }
27         }
28         if(!flag)
29             System.out.println("Keep going...");
30     }
31 }

 

posted @ 2021-04-28 22:11  47的菠萝~  阅读(65)  评论(0编辑  收藏  举报