1. 程式人生 > >【基礎練習】【模擬】Uva133

【基礎練習】【模擬】Uva133

有點點像約瑟夫的變式 注意函式形參要用逗號隔開

這個題目中ruka提供的處理環的方法很有用 可以學習一下

再一個就是出圈後相應位置賦值為零很方便

程式碼放上:

#include<cstdio>
using namespace std;
int n,k,m,a[22];

int go(int now,int plus,int num){
	while (num--){
		do{now=(now+plus+n-1)%n+1;
		}
		while (a[now]==0);
	}
	return now;
}
int main(){
	while (scanf("%d%d%d",&n,&k,&m)==3 && n){/*n is total,k id n and m is b*/
		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",a[p1]);
			left--;
			if (a[p1]!=a[p2]) {
			     printf("%3d",a[p2]);
				 left--;
		    }
		    a[p1]=a[p2]=0;
		    if (left) printf(",");
		}
		printf("\n");
	}
	return 0;
}

第一遍竟然WA了 還以為怎麼回事 仔細一看才發現是格式寫錯了 如果兩個人數的不同 中間不用加逗號

上述程式碼已修改

資訊組,久違了。

——唱徹《陽關》淚未乾,功名餘事且加餐。