博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
The Dole Queue UVA - 133
阅读量:5334 次
发布时间:2019-06-15

本文共 2063 字,大约阅读时间需要 6 分钟。

刘佳汝书上的例题,82页4-3,没什么难度,他说的很详细了,我稍微注释了一下。

#include
#define maxn 25int n, k, m, a[maxn];int go(int p, int d, int t)//用d的+-1取值来代表向前走和向后走{ while (t--) { do { p = (p + d + n - 1) % n + 1; } while (a[p] == 0);//走到下一个非零数字其中-1是为了平衡d为+1的情况,最后+1是为了平衡d为-1的情况 } return p;}int main(){ while (scanf("%d%d%d", &n, &k, &m) == 3 && n) { for (int i = 1; i <= n; i++) a[i] = i; int left = n; //剩余人数 int p1 = n, p2 = 1; while (left) { p1 = go(p1, 1, k); p2 = go(p2, -1, m); printf("%3d", p1); left--; if (p2 != p1) { printf("%3d", p2); left--; } a[p1] = a[p2] = 0; if (left) printf(","); } printf("\n"); } return 0;}

 

 

下边的今天自己写的,说实话他那个卡范围的表达式是真的难想,退而求其次了。

还有,%3d可真好用!

#include
#include
using namespace std;int Q[25];int k, m, n;int go(int t, int x, int i){ while (x--) { do { t += i; if (t <= 0) t = n; if (t >= n + 1)t = 1; } while (!Q[t]); } return t;}int main(){ cin.tie(0); cin.sync_with_stdio(false); //memset(Q, 0, sizeof(Q)); while (cin >> n >> k >> m) { if (!(k || m || n)) { break; } int _cnt = n; //初始化队列 for (int i = 0; i <= n; i++) { Q[i] = i; } //发放救济金 int a = 0, b = 0; while (_cnt) { a = go(a, k, 1); b = go(b, m, -1); if (a == b) { Q[a] = 0; cout << setiosflags(ios::fixed) << setiosflags(ios::right); cout << setw(3) << a;//格式化输出 _cnt--; } else { Q[a] = 0; Q[b] = 0; cout << setw(3) << a << setw(3) << b; _cnt -= 2; } if(_cnt!=0) cout<< ","; } cout << endl; } return 0;}

 

转载于:https://www.cnblogs.com/worldcreator-zh/p/10584584.html

你可能感兴趣的文章
C# 使用 SmtpClient 发送邮件注意项
查看>>
C#多线程学习(五) 多线程的自动管理(定时器)
查看>>
Hadoop产生背景
查看>>
NOIP2011 观光公交 加强版
查看>>
Android WebView使用基础
查看>>
在一个非套接字上尝试了一个操作 解决方法
查看>>
Fastjson莫名的一个BUG
查看>>
各浏览器下载文件名不乱码的解决办法
查看>>
判断邮箱格式是否正确的代码
查看>>
13.安卓消息处理机制
查看>>
CentOS 6.4操作系统安装(基于Vmware)
查看>>
MySQL 触发器例子(两张表同步增加和删除)
查看>>
PopupWindow响应返回键的问题
查看>>
全不选
查看>>
Python之路-python(常用模块学习)
查看>>
ado.net SqlHelper
查看>>
利用DataGrid显示某目录下的所有文件
查看>>
有史以来最出彩的编程语言名字
查看>>
UVa11187
查看>>
二叉搜索树的建树与遍历
查看>>