热门

最新

红包

立Flag

投票

同城

我的

发布
m0_62858660
m0_嘉木
3 年前
truem0_62858660

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

int main()
{
int n,k,m;
scanf("%d%d%d",&n,&k,&m);
int arr[100]={0,0,0,0,0};//定义一个数组存放这些人
int i,j,s=1,t=n;
for(i=k;i<n;i++)
{
if(t==1)
{
break;
}
if(arr[i]!=666)//这个人是否出列
{
arr[i]=s;//从k开始报数
if(arr[i]==m)//如果报的数与m一样则出列
{
arr[i]=666;//表示这个人出列
t--;
s=1;
k=i+1;//从出列那个人后面开始重新报数
if(k>=n)
{
k=0;//如果到了最后一个人则从第一开始
i=k-1;
}
continue;
}
s++;
}
if(i==n-1)
{
k=0;
i=k-1;
continue;
}
}
for(j=0;j<n;j++)
{
if(arr[j]!=666)
{
printf("%d\n",j);
}
}
}

CSDN App 扫码分享
分享
评论
2
打赏
  • 复制链接
  • 举报
下一条:
代码
立即登录