标签:++ size mes bit printf index while 队列 ble
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 }
uvaoj 133 - The Dole Queue(逻辑,环形队列数数)
标签:++ size mes bit printf index while 队列 ble
原文地址:https://www.cnblogs.com/fqfzs/p/9951691.html