1. 程式人生 > >救濟金發放(UVa133)

救濟金發放(UVa133)

for ++ mil com tar == target -s std

  題目具體描述見:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=69

C++11代碼如下:

 1 #include<iostream>
 2 #include<iomanip>
 3 using namespace std;
 4 int que[25];
 5 int n, k, m;
 6 
 7 int go(int p, int d, int t) { //d表示步長,值為1表示逆時針,-1表示順時針
8 while (t--) { 9 do { 10 p = (p + d + n - 1) % n + 1; //防止(p+d)%n==0,(p+d+n-1)相當於旋轉一周,最後加1 11 } while (que[p]==0); 12 } 13 return p; 14 } 15 int main() { 16 while ((cin >> n >> k >> m) && n != 0) { 17 for (int i = 1; i <= n; i++) que[i] = i;
18 int left = n; //剩下的人數 19 int p1 = n, p2 = 1; //起始位置 20 while (left) { 21 p1 = go(p1, 1, k); 22 p2 = go(p2, -1, m); 23 cout << setw(3) << p1; 24 left--; 25 if (p1 != p2) { 26 cout << setw(3
) << p2; 27 left--; 28 } 29 que[p1] = que[p2] = 0; 30 if (left) cout << ,; 31 } 32 cout << endl; 33 } 34 return 0; 35 }

救濟金發放(UVa133)