救濟金髮放( The Dole Queue, UVa 133)
題目描述:
n(n<20)個人站成一圈,逆時針編號為 1~n。有兩個官員,A從1開始逆時針數,B從n開始順時針數。在每一輪中,官員A數k個就停下來,官員B數m個就停下來(兩個官員有可能能停在同一個人上)。接下來被官員選中的1個或2個人離開隊伍。
輸入格式 輸入n ,k ,m ,可能有多組資料,以 0 0 0結尾。
輸出格式 輸出每輪裡被選中的人的編號(如果有兩個人,先輸出被A選中的)。輸出的每個數應正好佔3列。樣例中的“ ␣ ”代表一個空格。
輸入樣例:
10 4 3
0 0 0
輸出樣例:
␣␣4␣␣8,␣␣9␣␣5,␣␣3␣␣1,␣␣2␣␣6,␣10,␣␣7
思路:一圈n個人可以看成一個迴圈佇列,設定n個標誌位來表示某個人有沒有被選中並離開隊伍,只有標誌位為false的元素才是迴圈佇列的有效元素。設定兩個遊標表示官員A和B當前所指向的元素,每次輸出就是將A的遊標向後迴圈移動k位,B的遊標向前迴圈移動m位(移動過程中跳過無效元素)並輸出,將輸出元素的標誌位設定為false,直至迴圈佇列中所有元素標誌均為false。
個人程式碼:
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n, k, m, A, B;
while(cin >> n >> k >> m && n)
{
//當前所數到的元素下標
A = -1, B = n;
//當前所屬到的元素個數
int cntA = 0, cntB = 0;
vector<bool>flagArr(n, false);
vector<bool>flagTrue(n, true);
bool flagSta = true;
while(flagArr != flagTrue)
{
if (!flagSta)
cout << ",";
flagSta = false;
//A數到下k個
while (cntA < k)
{
do
{
A = (A + 1) % n;
}while(flagArr[A]);
++cntA;
}
//B數到下m個
while (cntB < m)
{
do
{
B = (n + B - 1) % n;
}while(flagArr[B]);
++cntB;
}
cntA = cntB = 0;
flagArr[A] = flagArr[B] = true;
if (A == B)
printf("%3d", A + 1);
else
printf("%3d%3d", A + 1, B + 1);
}
printf("\n");
}
return 0;
}
參考程式碼:
#include<stdio.h>
#define maxn 25
int n, k, m, a[maxn];
// 逆時針走t步,步長是d(-1表示順時針走),返回新位置
int go(int p, int d, int t) {
while(t--) {
do { p = (p+d+n-1) % n + 1; } while(a[p] == 0); // 走到下一個非0數字
}
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;
}
相關文章
- 假髮重回顏值賽道,假髮經濟起風?
- 美國SEC:2024財年罰款及投資者救濟金額達82億美元
- UVA1587
- queue
- UVA11624-Fire!
- solution-uva1594
- 素數 UVA 406
- LeetCode-133-克隆圖LeetCode
- 讓數字經濟賦能開放型世界經濟建設
- Uva232 Crossword AnswersROS
- uva11292-Dragon of LoowaterGo
- 紫書UVa1592
- 紫書UVa297
- UVA11624 Fire!【BFS】
- Queue Sort
- Team Queue
- 2.15 Kamui ——ARC131~133UI
- 第31章 開放經濟的宏觀經濟學:基本概念
- 從救貓還是救畫說起
- UVA557 Burger 題解
- UVA 11572 Unique snowflakes (滑窗)
- uva10935卡片遊戲遊戲
- 《邊境獵人》即將發售EA版本:金髮御姐騎士與黑髮少女槍手的冒險故事
- PostgreSQL DBA(133) - Extension(postgresql_anonymizer)SQL
- 題解:UVA124 Following Orders
- UVA 10498 Happiness!(線性規劃)APP
- 燙髮
- 理髮
- 133、賦得暮雨送李胄
- Day133.異常處理 -SpringMVCSpringMVC
- Team Queue(佇列)佇列
- List、Set、Queue、Map
- JDK QUEUE佇列JDK佇列
- queue:work 原理分析
- python佇列QueuePython佇列
- 新 金 寶 電 話 熱 線 17176934555放間奧被禁
- QuestMobile:2020銀髮經濟洞察報告 超1億使用者規模 玩轉社交 影片 電商 銀髮群體潛力無限
- Mob研究院:2021年中國銀髮經濟洞察報告(附下載)