用数组解决约瑟夫环问题

题目:有 n 个人围成一圈, 顺序排号。 从第一个人开始报数(从1 到 3 报数),凡报到 3 的人退出圈子,问最后留下的是原来第几号的那位?
在这里插入图片描述

#include<stdio.h>
#include<stdlib.h>
#define NUM 3

int main()
{
    
    
	int m;
	printf("Please Enter the number of player:\n");
	scanf("%d",&m);
	int *array = (int *)malloc((m+1)*sizeof(int));
	if(array == NULL) {
    
    
		printf("Memory alloc failed.\n");
		return -1;
	}
	int sum_player = m;//记录当前有多少人参与游戏
	for(int i=1;i<m;i++)
		array[i] = i+1;
	array[m] = 1;
	/*定义一个整型数组array[i],第i个元素存放下一个元素的下标*/
	int current_index = 1;
	int previous_index = 0;
	
	while(sum_player > 1) {
    
    
		int inner_i = 1;
		while(inner_i <= NUM) {
    
    
			if(inner_i == NUM) {
    
    
				printf("%d is fired.\n",current_index);
				
				array[previous_index] = array[current_index];
				previous_index = current_index;
				current_index = array[current_index];
				inner_i++;
				sum_player--;
				break;
			}
			
			inner_i++;
			previous_index = current_index;
			current_index = array[current_index];
		}
	}
	printf("\nLeft num is:%5d\n",current_index);
	return 0;
}
``

猜你喜欢

转载自blog.csdn.net/m0_37546257/article/details/110959029