1. 程式人生 > >uvaoj 133 - The Dole Queue(邏輯,環形佇列數數)

uvaoj 133 - The Dole Queue(邏輯,環形佇列數數)

https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=69

有n個人向內排成一圈,從一個位置開始逆時針數k個,第k個出隊,從一個位置開始順時針數m個,第m個出隊,並輸出出隊的順序。

這題主要是環形佇列數數函式的編寫。

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int n,k,m,leftt;
 4 int a[25];
 5 int zou(int
p,int d,int t)//t表示步數,d是1或者-1表示順逆時針 6 { 7 while(t--) 8 { 9 do 10 { 11 p=(p+d+n-1)%n+1; 12 } 13 while(a[p]==0);//當選到的地方之前已經選過的,就跳過,再往前數一個人 14 } 15 return p; 16 } 17 int main() 18 { 19 20 while(~scanf("%d %d %d",&n,&k,&m),n+k+m)
21 { 22 memset(a,1,sizeof(a)); 23 leftt=n; 24 int p1=n,p2=1; 25 while(leftt) 26 { 27 28 p1=zou(p1,1,k);//1表示逆時針 29 p2=zou(p2,-1,m);//-1表示順時針 30 printf("%3d",p1);leftt--;// 31 if(p1!=p2) 32 {
33 printf("%3d",p2); 34 leftt--; 35 } 36 a[p1]=a[p2]=0; 37 if(leftt)printf(","); 38 } 39 printf("\n"); 40 41 } 42 43 return 0; 44 }