UVA 133 The Dole Queue
思路:用数组存编号,用0表示离开的人,数的时候跳过。
1 #include "stdio.h" 2 #include "string.h" 3 int n,m,k,a[25]; 4 5 int go(int p,int d,int t) 6 { 7 while(t--) 8 { 9 do{ 10 p=(p+d+n-1)%n+1;//不这样会得出0,比如10 1 1,会得到p=0,但是a[0]=0,会重复return p=9; 11 } 12 while(a[p]==0); 13 } 14 return p; 15 } 16 17 int main() 18 { 19 while(scanf("%d%d%d",&n,&k,&m)==3&&n) 20 { 21 for(int i=1;i<=n;i++) 22 a[i]=i; 23 int left=n; 24 int p1=n,p2=1; 25 //p1是A,p2是B,那为什么p1是n而不是题目说的1呢??? 26 //因为它说了,A数到k停下来,如果是10 4 3, 27 //从1:得到5,而从n才是得到4,所以其实是从n开始 28 while(left) 29 { 30 p1=go(p1,1,k); 31 p2=go(p2,-1,m); 32 printf("%3d",p1); 33 left--; 34 if(p1!=p2) 35 { 36 printf("%3d",p2); 37 left--; 38 } 39 a[p1]=a[p2]=0; 40 if(left) 41 printf(","); 42 } 43 printf("\n"); 44 } 45 return 0; 46 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步