n(n<20)个人站成一圈,逆时针编号为1~n。有两个官员,A从1开始逆时针数,B从n开始顺时针数。在每一轮中,官员A数k个就停下来,官员B数m个就停下来(注意有可能两个官员停在同一个人上)。接下来被官员选中的人(1个或者2个)离开队伍。输入 n,k,m 输出每轮里被选中的人的编号

样例输入

n=10 k=4 m=3

样例输出

4 8 9 5 3 1 2 6 10 7

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
int n, m, k;
int i;
int stemp_m, stemp_k; // 代表军官AB所在的位置
int people_num; // 记录队伍中还有多少人未被选出
int people_state[20] = {0};
// 初始化数组所有值为0,
// 当值为1时,代表该人存在,
// 当值为0时,代表该人已被选出 printf("请输入总人数n,官员A数的k,官员B数的m:");
scanf("%d %d %d", &n, &k, &m); for(i = 1; i <= n; i++)
{
people_state[i] = 1;
} stemp_m = n + 1;
stemp_k = 0;
people_num = n;
while(people_num)
{
for(i = 0; i < k; i++) // 得出官员A所选的人的位置
{
do
{
stemp_k = (stemp_k + 1) % n;
if(stemp_k == 0)
{
stemp_k = n;
}
} while (people_state[stemp_k] == 0);
} for(i = 0; i < m; i++) // 得出官员B所选的人的位置
{
do
{
stemp_m = stemp_m - 1;
if(stemp_m == 0)
{
stemp_m = n;
}
} while (people_state[stemp_m] == 0);
} printf("%d ", stemp_k);
people_num--;
if(stemp_m != stemp_k)
{
printf("%d ", stemp_m);
people_num--;
}
people_state[stemp_m] = 0;
people_state[stemp_k] = 0;
}
printf("\n");
system("pause"); }

最新文章

  1. Swift - 代码创建NSLayoutConstraint布局
  2. 【TYVJ 1463】智商问题 (闲得无聊)
  3. CPU绑定操作
  4. ps -C nginx --no-header |wc -l
  5. AndroidStudio里面怎么取消与SVN的关联
  6. 李洪强-C语言5-函数
  7. linux 安装软件,卸载软件 等的几种方式
  8. Scala学习——数组/映射/元组
  9. 比较长的sql语句
  10. IOS文件存储小结
  11. C#设计模式之八桥接模式(Bridge)【结构型】
  12. Google弃用HttpClient 而推荐使用HttpURLConnection的原因
  13. 分析 Oracle SQL 执行计划的关注点
  14. Struts2配置拦截器
  15. 初步了解Fork/Join框架
  16. hadoop故障及其应对
  17. 棋盘游戏 HDU - 1281 (删点 二分匹配)
  18. centos7.3上安装oracle xe 11g
  19. leetcode235
  20. NULL,&quot;&quot;,String.Empty三者在C#中的区别

热门文章

  1. RC4弱密码套件检测
  2. android 第三方开源库 学习汇总之Butter Knife
  3. https工具类
  4. 如何将MultipartFile转换成based4
  5. 每天一道Rust-LeetCode(2019-06-02)
  6. RabbitMQ六种队列模式-简单队列模式
  7. [BZOJ1015/JSOI2008]星球大战
  8. 【CSP-S膜你考】不怕噩梦 (模拟)
  9. 获取当前页面url指定参数值
  10. SCAN----Redis检索键值对