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