例题 4-3 救济金的发放

版权声明:本人菜鸟一只,如文章有错误或您有高见,请不吝赐教 https://blog.csdn.net/qq_41138935/article/details/82844114
#include<stdio.h>
#define MAXN 25
int n,k,m,a[MAXN];

int go(int p,int d,int t){
	while(t--){
		do{
			p=(p+d+n-1)%n+1;
		}while(a[p]==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;
		while(left){
			p1=go(p1,1,k);
			p2=go(p2,-1,m);
			printf("%3d",p1);
			left--;
			if(p2!=p1){
				printf("%3d",p2);
				left--;
			}
			a[p1]=a[p2]=0;
			if(left)
				printf(",");
		} 
		printf("\n");
		
	}
	
	return 0;
}

p=(p+d+n-1)%n+1;  解决问题的关键

猜你喜欢

转载自blog.csdn.net/qq_41138935/article/details/82844114
4-3