UVa 305/POJ 1012 Joseph(ジョセフリングの次の位置はどうなりますか?)


http://uva.onlinejudge.org/index.php?option=com_オンラインjudge&Itemid=8&category=24&page=show_problem&problem=241
http://poj.org/problem?id=1012
コードの中のツイスト式は実際の位置を指摘することはできませんが、mは題意を満足させるためには、この位置(マイナスマッピング後)は必ず>=k
もちろんあなたもメーターで実現できます.
/*0.079s*/

#include
using namespace std;

int solve(int k)
{
	int m, pos, n = k << 1, i, next;
	///         ,           
	for (m = k;; m++)
	{
		pos = m % n;
		if (pos >= k && pos < n)
		{
			///      bad guy  ,         pos   bad guy
			for (i = 1; i < k; ++i)
			{
				next = (pos + m) % (n - i); ///      ,       
				if (next < k || next >= n) break; ///   ,    good guy
				pos = next;
			}
			if (i == k) break;
		}
	}
	return m + 1;
}

int main()
{
	int k, ans[14];
	for (int i = 1; i < 14; ++i)
		ans[i] = solve(i);
	while (scanf("%d", &k), k)
		printf("%d
", ans[k]); return 0; }