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 ...
随机推荐
- eclipse中tomcat配置(待完善)
tomcat版本:apache-tomcat-6.0.29 项目结构: 一.新建server方式 二.eclipse tomcat plugin方式 tomcat plugin方式必须保证 ...
- 常见web服务器错误
参考地址:http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.5 10 Status Code Definitions ...
- win10任务视图
之所以用到win10任务视图源自于一个需求,就是我想在上班操作电脑的同时想将某个游戏在后台挂机,这样工作归工作,挂机归挂机,互不干扰.win10任务视图就能轻松的解决这个问题. 任务视图 新建任务视图 ...
- 初识NoSQL 快速认识NoSQL数据库 分析Analytics For Hackers: How To Think About Event Data
做了一年的大一年度项目了,对于关系型数据库结构还是有些了解了,有的时候还是觉得这种二维表不是很顺手.在看过一篇文章之后,对NoSQL有了初步的了解,(https://keen.io/blog/5395 ...
- 无限的hypotheses 变成有限的dichotomies
给定任意D,它是某些H的Bad Sample(即Ein和Eout不接近)的概率为: 即H中备选函数的数量M=|H|越少,样本数据量N越大,则样本成为坏样本的概率越小.在一个可接受的概率水平上,学习算法 ...
- selenium+python 浏览器标签页跳转 switch_to_window
浏览器页面跳转方法记录: from selenium import webdriver import time browser = webdriver.Chrome() first_url='http ...
- SQLserver行转列与列转行
行表: 行表 姓名 属性 属性值 JACK 身高 180 JACK 体重 80 JACK 年龄 27 TOM 身高 164 TOM 体重 59 TOM 年龄 20 列表: 列表 姓名 身高 年龄 体重 ...
- VS2010性能监视工具
<编程珠玑(续)>第一章中就介绍了性能监视工具,对于较简单的程序来说,性能监视工具其实可以用变量累加来计算的,但是对于较复杂的程序来说就需要比较好的性能监视工具了.而VS2010提供了一个 ...
- 安装gcc及开发环境
安装gcc及开发环境================================> 安装gcc: * apt-get install build-essential * gcc ...
- iOS:等比压缩截图代码
将一幅图片按着需要的尺寸进行等比的压缩和放大,最后再截取需要尺寸部分,不知道说清楚没,反正就那意思吧! +(UIImage *)compressImageWith:(UIImage *)image w ...