紫书章四例题3——UVA 133 TheDole Queue
来源:互联网 发布:对称轴画图软件手机 编辑:程序博客网 时间:2024/06/10 00:38
题意:有1-n人逆时针围成一个圈,然后A从1开始逆时针开始数,到k停止,然后将那个人去掉,B同时从n顺时针开始数,到m个人的时候停止,将该人去掉。这为一轮。
然后这道题的目的主要还是简化代码。然后还有学到了一些小点
1.人数的话,总数都可以用left表示,然后减减,最后判断是否为0即可。不用再和以前一样,用vis数组,然后再排序了。
2.bg=(bg+d+n-1)%n+1;
代码
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <cmath>using namespace std;int n;int vis[30];int qd(int d,int bg,int k){ int g=0; for(bg=bg;;bg=(bg+d+n-1)%n+1) { if(!vis[bg]) {g++;} if(g==k) break; } return bg;}int main(){ //freopen("D:\\input.txt","r",stdin); int k,m; while(scanf("%d %d %d",&n,&k,&m)!=EOF&&n+m+k) { memset(vis,0,sizeof(vis)); int left=n; int p=1,q=n; while(left) { p=qd(1,p,k); q=qd(-1,q,m); printf("%3d",p),left--; if(p!=q) printf("%3d",q),left--; vis[p]=vis[q]=1; if(left) printf(","); else printf("\n"); } } return 0;}
然后书上在编写函数的时候用了dowhile,但是中间的一个点要注意,p开始的时候为n,q为1.因为在函数中会多走一步。所以之前要减去
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <cmath>using namespace std;int n;int vis[30];int qd(int d,int bg,int k){ while(k--){ do{bg=(bg+d+n-1)%n+1;} while(vis[bg]==1);}//当vis[bg]==1的时候执行do。直到走到下一个有人的位置,也就是vis为0 return bg;}int main(){ //freopen("D:\\input.txt","r",stdin); int k,m; while(scanf("%d %d %d",&n,&k,&m)!=EOF&&n+m+k) { memset(vis,0,sizeof(vis)); int left=n; int p=n,q=1;// while(left) { p=qd(1,p,k); q=qd(-1,q,m); printf("%3d",p),left--; if(p!=q) printf("%3d",q),left--; vis[p]=vis[q]=1; if(left) printf(","); else printf("\n"); } } return 0;}
0 0
- 紫书章四例题3——UVA 133 TheDole Queue
- 例题4-3 UVa 133 The Dole Queue
- 例题 4-3 救济金发放(The Dole Queue) UVa 133
- 紫书章四 例题4——UVA 213 Message Decodeing
- 章三例题3——UVA 401 Palindromes
- 例题6-3 UVa
- 例题5-6 UVA 540 Team Queue团体队列
- 紫书章五例题六 团队队列 uva 540(queue)
- Problem 014 —— UVa 133 - The Dole Queue
- 假期训练——The Dole Queue UVA - 133 模拟
- UVA 540 —— Team Queue
- 紫书动规 例题9-3 UVA
- 例题9-3 UVa 1347
- 章三例题2——UVA 10082
- 章三例题5——UVA 1583 Degit Generator
- 章三例题6——UVA 1584
- 紫书章七例题 1——UVA 725 Division
- UVa 133 The Dole Queue
- STM32 IAR 及官方库文件的更新
- SVN previous operation has not finished run clean up if it was iterrupted
- gdb不知为何显示2次析构
- 技术人员如何持续不断的成长?
- 让机器人更安全——(4.机器人的碰撞标准)
- 紫书章四例题3——UVA 133 TheDole Queue
- vs2012 未能加载visual c++ language manager package
- HEVC有关量化参数Qp的计算
- Delphi的对象注销方法Destroy和free的区别
- 51Nod 1256 乘法逆元
- SVN代码冲突解决方案小集合
- 支付相关的博客地址
- Python开发-Python函数-Python函数的构建
- Android相机开发那些坑