UVa-133 The Dole Queue(约瑟夫环)
来源:互联网 发布:网眼空间绑定域名教程 编辑:程序博客网 时间:2024/05/26 15:55
题意:為了縮短領救濟品的隊伍,NNGLRP決定了以下策略:每天所有來申請救濟品的人會被放在一個大圓圈,面朝裡面。選定一個人為編號 1 號,其他的就從那個人開始逆時針開始編號直到 N。一個官員一開始逆時針數,數 k 個申請者,然後另一個官員第 N 個始順時針方向數 m 個申請者,這兩個人就被送去再教育。如果兩個官員數的是同一個人,那個人則被送去從政,然後2個官員再在剩下的人裡面繼續選直到沒人剩下來,注意兩個被選中的人是同時走掉的,所以就有可能兩個官員選中一個人。
例子:sample input:10 4 3 sample output:4 8, 9 5, 3 1, 2 6, 10, 7
13 17 42 4 11, 10 1, 8 6, 13 7, 3, 5 12, 9 2
7 8 47 1 3, 5 7, 2 4, 6
0 0 0
分析:一道模拟题,用vis数组来标记该数有没有被选过,然后用两个循环,因为是同时发生,所以去掉以及输出的操作放在最后,要注意输出格式
#include<iostream>#include<cstring>using namespace std;int N, k, m;int arr[25];int vis[25];int main(){while(cin>>N>>k>>m && N){int num = 0; //num来表示一共去掉了几个数for(int i = 1; i<=N; i++){arr[i] = i;vis[i] = 1;}int A = 0, B = N+1;int A_num = 0, B_num = 0; //用来记录数了多少个int flagA, flagB; //用来判断A和B是不是同一个数while(num<N){int temp = 0;flagA = 0; flagB = 0;for(;;){A++;if(A>N) A = 1;if(vis[A]){A_num++;if(A_num == k){ flagA = 1; A_num = 0; num++; printf("%3d", A); temp = A; break;}} }for(;;){B--;if(B<1) B = N;if(vis[B]){B_num++;if(B_num == m){ flagB = 1; B_num = 0; num++; if(temp!=B) printf("%3d", B); break;}}}if(flagA && flagB && A==B) num--;if(num<N) printf(",");if(flagA) vis[A] = 0;if(flagB) vis[B] = 0;}printf("\n");}return 0;}
- UVA 133 The Dole Queue 【约瑟夫环】
- UVa-133 The Dole Queue(约瑟夫环)
- uva 133 The Dole Queue(约瑟夫变形)
- uva 133 The Dole Queue 双向约瑟夫环 模拟实现
- Uva 133 The Dole Queue 双向约瑟夫环
- UVa 133 The Dole Queue
- Uva 133 The Dole Queue
- uva 133 - The Dole Queue
- uva-133 - The Dole Queue
- UVa 133 - The Dole Queue
- uva 133 The Dole Queue
- UVa 133 - The Dole Queue
- UVa 133 - The Dole Queue
- uva 133 - The Dole Queue
- uva-133 The Dole Queue
- UVA 133 The Dole Queue
- UVa 133 - The Dole Queue
- uva 133 - The Dole Queue
- 常用正则表达式大全
- 自我突破
- Vue, App与我(八)
- 多态和类型转化(instanceof)
- java发送邮件
- UVa-133 The Dole Queue(约瑟夫环)
- 一键产生非交互的密钥对
- 【python】excel操作
- 正规表示法和Linux三剑客
- Java堆、栈、方法区、常量池(转载)
- this指针详解
- linux 路由表设置 之 route 指令详解
- spring boot(四):thymeleaf使用详解
- 通过配置文件自动建表时常出现的错误