夢追い人

"It takes a dreamer to make a dream come true."―Vincent Willem van Gogh

ヨセフスの問題は世界史の課題

0085

漸化式自分では導けないorz

#include <cstdio>

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

int main() {
	int n, m;
	while (scanf("%d%d", &n, &m)) {
		if (n == 0 && m == 0) break;
		printf("%d\n", dfs(n,m)+1);
	}
}

0078

このぐらいだったら・・・

#include <cstdio>
struct pos { int x, y; };
int main() {
	int n;
	while (scanf("%d",&n)&&n!=0) {
		int map[n][n];
		for (int i=0; i<n; i++) for (int j=0; j<n; j++) map[i][j] = -1;
		pos p; p.y = n/2; p.x = n/2+1;
		for (int i=1; i<=n*n; i++) {
			while (map[p.x][p.y] != -1) {
				p.x++; p.y--;
				if (p.x>=n) p.x = 0;
				else if (p.x<0) p.x = n-1;
				if (p.y>=n) p.y = 0;
				else if (p.y<0) p.y = n-1;
			}
			map[p.x][p.y] = i;
			p.x++; p.y++;
			if (p.x>=n) p.x = 0;
			else if (p.x<0) p.x = n-1;
			if (p.y>=n) p.y = 0;
			else if (p.y<0) p.y = n-1;
		}
		for (int i=0; i<n; i++) {
			for (int j=0; j<n; j++) {
				printf("%4d", map[i][j]);
			}
			printf("\n");
		}
	}
}