人类高质量代码解约瑟夫环问题

Posted 勇敢*牛牛

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了人类高质量代码解约瑟夫环问题相关的知识,希望对你有一定的参考价值。

n个人(0,1,2,3,4…n-1),围成一圈,从编号为k的人开始报数,报数报到m的人出队(报数是1,2,…m这样报的)。下次从出队的人之后开始重新报数,循环往复,当队伍中只剩最后一个人的时候,那个人就是大王。现在,给定n,k,m, 请你求出大王的编号。

输入一行包含三个整数
n,k,m1<=n<=100,1<=k<=n-1,1<=m<=100

代码描述

#include <stdio.h>
#include <stdlib.h>
int main() {
	int array[100]={0};
	int n=0;
	int k=0;
	int m=0;
	scanf("%d%d%d",&n,&k,&m);
	int i=0;
	for(i=0;i<n;i++){	//确定玩的人数,给赋值为1 
		array[i]=1;
	}
	int index=1; 		//报的序号 
	i = k-1;			//根据数据特性,确定好编号从为k的人开始数 
	int pen = n;		//记录剩余人数,剩下一个的时候就是国王 
	while(pen !=1 ) {
		if(i>=n){
			i=0;		//人数报完了就重置
		}
		if(array[i]==0){
			i++;
			continue;	//没有人了,就不能继续报数了,直接跳过即可
		}
		if(index == m){ //设置淘汰后的情况
			array[i] = 0;
			index = 0;
			pen--;
		}
		i++;
		index++; 
	}
	for(i=0;i<n;i++){
		if(array[i]==1){
			printf("%d",i+1);
			break;
		}
	}
	return 0;
}

结果检测:

输入
5 1 2
输出
3

以上是关于人类高质量代码解约瑟夫环问题的主要内容,如果未能解决你的问题,请参考以下文章

python类约瑟夫环原创问题求解 求大神

约瑟夫环(超好的代码存档)--19--约瑟夫环--LeetCode面试题62(圆圈最后剩下的数字)

约瑟夫环(超好的代码存档)--19--约瑟夫环--LeetCode面试题62(圆圈最后剩下的数字)

约瑟夫环 代码

java中约瑟夫环代码实现

算法:约瑟夫环问题