题意:一个长度为N的循环队列,一个人从1号开始逆时针开始数数,第K个出列,一个人从第N个人开始顺时针数数,第M个出列,选到的两个人要同时出列(以不影响另一个人数数),选到同一个人就那个人出列。

思路:用数组来操作,详情见代码吧。

#include <iostream>
#include <stdio.h>
#include <string> /*
用数组存储序号,从左到右依次为1~n。
逆时针相当于从左往右依次数,大于n再从1开始,用right作为指针。
顺时针相当于从右往左依次数,小于1再从n开始,用left作为指针。
*/
using namespace std;
const int maxn=;
int p[maxn]; //存储一开始的序列
int n,k,m; int main()
{
while(scanf("%d%d%d",&n,&k,&m)!=EOF){
if(n==&&k==&&m==)
break;
int first=;
for(int i=;i<=n;i++)
p[i]=i+;
int left=n-,right=;
do{
//n为剩余人的个数,下面是计算此次被数到的人的位置
right=(right+n+k-)%n;
//从left开始往左数m个,相当于从left开始往右数n-(m-1)个
left=((left+n-(m-))%n+n)%n; //注意这里很有可能会出现负数,所以加n再模一次
if(left==right){
if(first)
printf("%3d",p[left]);
else
printf(",%3d",p[left]);
first=;
for(int i=left;i<n;i++)
p[i]=p[i+];
//因为left是往左移的,后面的数往左移动,指针也要往左移动,使left指向出列的那个人的前一个人
//而由于right是往右数的,后面的数往左移动,right自动指向后一个(即出列的那个人的后一个),所以不需要变动
left--;
if(left< && n>)
left=(left+n-)%(n-);
n--;
}
else{
if(first)
printf("%3d%3d",p[right],p[left]);
else
printf(",%3d%3d",p[right],p[left]);
first=;
//left指针在right之前
if(left<right){
for(int i=right;i<n;i++)
p[i]=p[i+];
for(int i=left;i<n-;i++)
p[i]=p[i+];
/*
right后面的数都往左移动1次
left后面的数都往左移动2次,
由于right指针是往右移动的,所以为了指向出列的人的后一个,right要减1
left指针则是往左移动的,这里要往左移动1格,指向出列的人的前一个。
*/
right--;
if(right< && n>)
right=(right+n-)%(n-);
left--;
if(left< && n>)
left=(left+n-)%(n-);
}
//left指针在right之后
else{
for(int i=left;i<n;i++)
p[i]=p[i+];
for(int i=right;i<n-;i++)
p[i]=p[i+];
/*left指针后面的数都往左移动1次
right指针后面的数都往左移动2次,
由于right指针是往右移动的,当后面的数往左移动,right自动指向出列的人的后一个,所以不需要变动。
left指针则是往左移动的,这里要往左移动2格,指向出列的人的前一个。
*/
left-=;
if(left< && n>)
left=(left+n-)%(n-);
}
n-=;
}
}while(n);
printf("\n");
}
return ;
}

UVA 133 The Dole Queue(报数问题)的更多相关文章

  1. UVA 133 The Dole Queue

    The Dole Queue 题解: 这里写一个走多少步,返回位置的函数真的很重要,并且,把顺时针和逆时针写到了一起,也真的很厉害,需要学习 代码: #include<stdio.h> # ...

  2. UVA 133“The Dole Queue”(循环报数处理技巧)

    •参考资料 [1]:紫书P82 •题意(by紫书) 按照被选中的次序输出这 n 个人的编号: 如果A和B选中的是同一个人,输出一个这个人的编号: 输出格式:输出的每个编号占3个字节,不够3个字节在前面 ...

  3. uva 133 The Dole Queue 双向约瑟夫环 模拟实现

    双向约瑟夫环. 数据规模只有20,模拟掉了.(其实公式我还是不太会推,有空得看看) 值得注意的是两个方向找值不是找到一个去掉一个,而是找到后同时去掉. 还有输出也很坑爹! 在这里不得不抱怨下Uva的o ...

  4. uva - 133 The Dole Queue(成环状态下的循环走步方法)

    类型:循环走步 #include <iostream> #include <sstream> #include <cstdio> #include <cstr ...

  5. uva 133(The Dole Queue UVA - 133)

    一道比较难想的模拟题,用了队列等东西,发现还是挺难做的,索性直接看了刘汝佳的代码,发现还是刘汝佳厉害! 代码本身难度并不是很大,主要还是p=(p+n+d-1)%n+1;这一句有些难度,实际上经过自己的 ...

  6. uvaoj 133 - The Dole Queue(逻辑,环形队列数数)

    https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  7. UVa133.The Dole Queue

    题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  8. The Dole Queue UVA - 133

     In a serious attempt to downsize (reduce) the dole queue, The New National Green Labour Rhinoceros ...

  9. The Dole Queue

    The Dole Queue Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Submit cid ...

随机推荐

  1. MySQL 备份和恢复

      详细地址:http://imysql.cn/mysql_backup_and_recover

  2. javascript a=a||"" 表达式

    其实: a=a||"defaultValue"; 与: if(!a){ a="defaultValue"; } 和: if(a==null||a==" ...

  3. 弹性布局-flex

    浅谈display:flex   display:flex 意思是弹性布局 首先flex的出现是为了解决哪些问题呢? 一.页面行排列布局 像此图左右两个div一排显示 可以用浮动的布局方式 html部 ...

  4. 取代file_get_contents 的一个采集函数

    function url_get_content($url=''){ $ch = curl_init(); $timeout = 100; $browser = 'Mozilla/5.0 (Windo ...

  5. Freezable 对象(WPF)

    # Freezable 对象(WPF) # > Freezable 继承自 DependencyObject,同时添加了 Freezable 方法,用于冻结对象. --- ## 冻结对象 ## ...

  6. Winform合并多个Excel文件到一个文件中(源文件.xls,实际是.xml)

    1.下面两个文件.xls是给的文件,实际上是.xml文件 2.具体的代码 private void btOK_Click(object sender, EventArgs e) { //0.获取路径文 ...

  7. php获取系统信息的方法

    php获取系统信息的方法. 用 getenv函数进行处理: <?php $root = getenv('DOCUMENT_ROOT'); ////服务器文档根目录 $port = getenv( ...

  8. hdu 5451 Best Solver 矩阵循环群+矩阵快速幂

    http://acm.hdu.edu.cn/showproblem.php?pid=5451 题意:给定x    求解 思路: 由斐波那契数列的两种表示方法, 之后可以转化为 线性表示 F[n] = ...

  9. php 彩票类 lottery

    <?php /* * For the full copyright and license information, please view the LICENSE * file that wa ...

  10. java之redis篇(spring-data-redis整合)

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...