#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <locale.h>

int* generate(int n);
void show(int* a, int n);
void kill(int *a, int n, int i);
void circle(int *a, int n, int k, int i);

int main() {
	int n = 10, k = 2, *a = NULL;
	a = generate(n);
	show(a, n);
	circle(a, n, k, 0);
}

// здесь храним номера всех живущих на данный момент воинов
int* generate(int n)
{
	int* a;
	int i;
	a = (int*)malloc(n*sizeof(int));
	if (a == NULL)
		return NULL;
	for (i = 0; i < n; i++) {
		*(a + i) = i + 1;
	}
	return a;
}

void show(int *a, int n) {
	int i;
	setlocale(LC_ALL, "Russian");
	printf("Участвует воинов: %d \n", n);
	for (i = 0; i < n; i++) {
		printf("%d ", *(a + i));
	}
	printf("\n");
}

// воин умирает - удаляем его из массива, а тех, кто стоял за ним, сдвигаем на один элемент влево
void kill(int *a, int n, int i) {
	int j;
	for (j = i; j < n - 1; j++)
		*(a + j) =  *(a + j + 1);
}

void circle(int *a, int n, int k, int i) {
	int ii;
	if (n > k) {
		ii = i + k - 1;
		if (ii >= n) {
			ii = ii % n;
			}
		kill(a, n, ii);
		circle(a, n - 1, k, ii);
	}
	printf("Оставшиеся в живых: %d \n", n);
	for (i = 0; i < k; i++) {
		printf("%d ", *(a + i));
	}
	free(*a);
	printf("\n");
}