壞人必須死

題目描述:

有 m 個好人和 m 個壞人坐成一個圈,前 m 個人是好人(編號爲 1, 2, 3, …, m),後 m 個人是壞人(編號爲 m + 1, m + 2, …, 2m)。現在他們開始循環報數,要求從編號爲 1 的人開始報,如果有人報到 k 則他必須死亡,而死掉的人的下一個人則繼續從 1 開始報數。請求出最小的 k 使得,所有的壞人都死掉而好人都活下來。

輸入描述:

多組輸入,每組輸入 1 行,爲一個整數 m (1 <= m <= 12)

輸出描述:

對於每組輸入,輸出爲 1 個整數 k 爲使得壞人都死掉的最小報的數

樣例輸入:

3
4

樣例輸出:

5
30

C++代碼

#include<iostream>
using namespace std;

int ysf(int sum, int k, int n){
	if(n == 1){
		return (sum + k - 1) % sum + 1;
	}
	return (ysf(sum-1,k,n-1) + k - 1) % sum + 1;
}

int main(){
	int m;
	while(cin >> m){
		int sum = 2 * m, n = 0;
		int k = m + 1;
		while(++n <= m){
			int t = ysf(sum,k,n);
			if(t <= m){
				n = 0;
				k++;
			}
		}
		cout << k << endl;
	}
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章