
1124 Raffle for Weibo Followers (20 分)
读取输入:首先读取输入数据,包括转发者的总数 M,抽奖间隔 N,以及第一个赢家的起始位置 S。 检查起始位置:如果第一个赢家的起始位置 S 超过了转发者总数 M,那么直接输出 “Keep going...”。 存储转发者名单:将转发者的名字存储在一个数组中,以便后续处理。 标记已选转发者:使用一个布尔数组来记录哪些转发者已经被选为赢家。 遍历并选出赢家:从起始位置 S 开始,每隔 N 个转发者选出一个赢家,直到遍历完所有转发者或选出足够的赢家。 输出结果:如果选出的赢家数量不够 N 个,输出 “Keep going...”;否则,按顺序输出每个赢家的名字。 读取输入:使用 检查起始位置:如果 s 超过 m,直接输出提示并返回。 存储转发者名单:读取接下来的 M 行转发者的名字并存储在数组 names 中。 初始化标记数组:创建一个布尔数组 selected,用来记录哪些转发者已经被选为赢家。 遍历选出赢家:从位置 s 开始,每隔 N 个转发者检查一次,直到遍历完所有转发者或选出足够的赢家。 输出结果:根据选出的赢家数量输出结果,如果不够,输出提示。
发布日期:2021-05-12 19:57:33
浏览次数:18
分类:精选文章
本文共 1455 字,大约阅读时间需要 4 分钟。
为了解决这个问题,我们需要帮助 John 生成抽奖活动的赢家列表。抽奖规则是从每 N 个转发者中选出一个赢家,且每个转发者只能中奖一次。我们需要确保按顺序生成赢家名单,并避免重复。
方法思路
解决代码
#include#include #include #include using namespace std;int main() { int m, n, s; cin >> m >> n >> s; if (s > m) { cout << "Keep going..." << endl; return 0; } vector names(m + 1); for (int i = 1; i <= m; ++i) { names[i] = string(); cin >> names[i]; } bool* selected = new bool(m + 1); int cnt = 0; int i = s; while (i <= m) { if (!selected[i]) { selected[i] = true; cnt++; cout << names[i] << endl; if (cnt == n) { break; } } i += n; } if (cnt < n) { cout << "Keep going..." << endl; } delete[] selected; return 0;}
代码解释
cin
读取输入数据,存储到变量 m, n, s 中。这个方法确保了我们按顺序选出赢家,并避免重复,每个转发者只能中奖一次。
发表评论
最新留言
不错!
[***.144.177.141]2025年04月27日 13时36分26秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
C++错误笔记
2019-03-10
解决 MySQL 8.0 客户端连接 caching_sha2_password 问题
2019-03-10
GZIP压缩和解压缩不删除原始文件
2019-03-10
【无线通信模块】GPRS DTU不稳定和容易掉线原因
2019-03-10
CSS(六)|页面布局之定位
2019-03-10
比特币(BSV)知识库:身份-BSVAlias
2019-03-10
设计模式 - 2) 策略模式
2019-03-10
SpringBoot使用RedisTemplate简单操作Redis的五种数据类型
2019-03-10
国标流媒体服务器以ROOT身份运行提示“permission denide”报错解决
2019-03-10
如何在农业或大棚内布置互联网安防监控系统实现智慧农业?
2019-03-10
【视频教程】EasyNVR如何将老版本的EasyNVR的数据迁移到4.0.0以上版本
2019-03-10
qt中转到槽后如何取消信号与槽关联
2019-03-10
qt问题记录-spin box与double spin box
2019-03-10
python向Excel读取一行数据
2019-03-10
移动端事件
2019-03-10