UVA 133 The Dole Queue(报数问题)
题意:一个长度为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(报数问题)的更多相关文章
- UVA 133 The Dole Queue
The Dole Queue 题解: 这里写一个走多少步,返回位置的函数真的很重要,并且,把顺时针和逆时针写到了一起,也真的很厉害,需要学习 代码: #include<stdio.h> # ...
- UVA 133“The Dole Queue”(循环报数处理技巧)
•参考资料 [1]:紫书P82 •题意(by紫书) 按照被选中的次序输出这 n 个人的编号: 如果A和B选中的是同一个人,输出一个这个人的编号: 输出格式:输出的每个编号占3个字节,不够3个字节在前面 ...
- uva 133 The Dole Queue 双向约瑟夫环 模拟实现
双向约瑟夫环. 数据规模只有20,模拟掉了.(其实公式我还是不太会推,有空得看看) 值得注意的是两个方向找值不是找到一个去掉一个,而是找到后同时去掉. 还有输出也很坑爹! 在这里不得不抱怨下Uva的o ...
- uva - 133 The Dole Queue(成环状态下的循环走步方法)
类型:循环走步 #include <iostream> #include <sstream> #include <cstdio> #include <cstr ...
- uva 133(The Dole Queue UVA - 133)
一道比较难想的模拟题,用了队列等东西,发现还是挺难做的,索性直接看了刘汝佳的代码,发现还是刘汝佳厉害! 代码本身难度并不是很大,主要还是p=(p+n+d-1)%n+1;这一句有些难度,实际上经过自己的 ...
- uvaoj 133 - The Dole Queue(逻辑,环形队列数数)
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- UVa133.The Dole Queue
题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- The Dole Queue UVA - 133
In a serious attempt to downsize (reduce) the dole queue, The New National Green Labour Rhinoceros ...
- The Dole Queue
The Dole Queue Time Limit:3000MS Memory Limit:0KB 64bit IO Format:%lld & %llu Submit cid ...
随机推荐
- THREE.js代码备份——canvas - lines - colors(希尔伯特曲线3D、用HSL设置线颜色)
<!DOCTYPE html> <html lang="en"> <head> <title>three.js canvas - l ...
- Redis源码研究--启动过程
---------------------6月23日--------------------------- Redis启动入口即main函数在redis.c文件,伪代码如下: int main(int ...
- Ubuntu 在未知root密码的情况下修改root密码
一, 开机按 F12 (或长按Shift), 进入GRUB界面. 二, 在 recovery mode 按e Ubuntu, Linux 3.5.0-17-generic (恢复模式) (或recov ...
- 关于python的环境变量问题
我的ubuntu安装python后,查看所有的环境变量,发现没有PYTHONPATH?对我使用python没太大影响,自己写的模块的路径问题有很多方法解决.但是现在我想将我写的模块放在一个包里,要用到 ...
- JS模板Handlebars的使用和有效组织
应用背景 我们在做项目时,为了使页面模块高度复用,使用页面模板是必须的,我想大家通常可能会新建MVC的项目,然后在页面中使用Razor引擎,新建Helper模板类,前后台代码的混写,简洁高效,一切 ...
- 数据的增量更新之EXISTS
有时候需要实现是数据的增量更新,因为更新全量会带来时间跟数据库资源的浪费,还有可能是数据出现冗余,所以需要使用增量数据同步,下面是一个数据增量同步的小实例. ---drop table A CREAT ...
- Java 网络编程(转)
一,网络编程中两个主要的问题 一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输. 在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可 ...
- 从零开始学ios开发(十九):Application Settings and User Defaults(上)
在iphone和ipad中,有一个东西大家一定很熟悉,那个东西就是Settings. 这次要学习的东西说白了很简单,就是学习如何在Settings中对一个app的某些属性进行设置,反过来,在app中更 ...
- NET免费服务器
NET免费服务器 1.先注册一个号.地址:https://appharbor.com/ 2.看看有没有你需要的插件,基本上都是免费的 3.本地创建git库 4.复制git远程仓库的地址 5.推送到远程 ...
- JGibbLDA:java版本的LDA(Latent Dirichlet Allocation)实现、修改及使用
转载自:http://blog.csdn.net/memray/article/details/16810763 一.概述 JGibbLDA是一个java版本的LDA(Latent Dirichl ...