uvaoj 133 - The Dole Queue(邏輯,環形佇列數數)
阿新 • • 發佈:2018-11-13
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(intp,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 }