#include<stdio.h>
#define maxn 25
int n,k,m,a[maxn];
int go(int p,int d,int t)
{
while(t--){ // 共 t次,一次走一格,以防跳过空白格
do{
p = (p+d+n-1)%n + 1; // B逆时针从 1->10 时
} while(a[p]==0); // 走到下一个非0的数字
}
return p;
}
int main()
{
while(scanf("%d %d %d",&n,&k,&m)==3 && n){
for(int i=1;i<=n;i++) a[i]=i;
int left=n; // 剩下的人数
int p1=n,p2=1; // A B的起始点
while(left){ // 有剩余
p1 = go(p1,1,k); // 顺时针
p2 = go(p2,-1,m); // 逆时针
printf("%3d",p1);
left--;
if(p1!=p2){
printf("%3d",p2);
left--;
}
a[p1]=a[p2]=0;
if(left) printf(",");
}
printf("\n");
}
return 0;
}
【算法题】救济金发放(UVA133)
于 2020-04-11 17:20:04 首次发布