人类高质量代码解约瑟夫环问题
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
以上是关于人类高质量代码解约瑟夫环问题的主要内容,如果未能解决你的问题,请参考以下文章
约瑟夫环(超好的代码存档)--19--约瑟夫环--LeetCode面试题62(圆圈最后剩下的数字)