题目描述
n个人围成一个圈,每个人分别标注为1、2、…、n,要求从1号从1开始报数,报到k的人出圈,接着下一个人又从1开始报数,如此循环,直到只剩最后一个人时,该人即为胜利者。例如当n=10,k=4时,依次出列的人分别为4、8、2、7、3、10,9、1、6、5,则5号位置的人为胜利者。给定n个人,请你编程计算出最后胜利者标号数。
附上连接:
链接: linkhttp://acm.swust.edu.cn/#/problem/956/341.
输入
第一行为人数n |
---|
第二行为报数k |
输出
输出最后胜利者的标号数。 |
---|
样例输入
10 |
---|
4 |
样例输出
5 |
---|
附上代码:
#include<stdio.h>
int main()
{
int n,k;
scanf("%d\n%d",&n,&k);
int m=n;/*计数活着的人*/
int a[10000];
int i,j=0,b=0;/*j为初始序号,b为循环计数器*/
for(i=0;i<n;i++)
{
a[i]=1;/*初始化数组,活着记为1,死者记为0 */
}
while(m>1)
{
if(a[j]==1)
{
b++;
if(k==b)
{
a[j]=0;
b=0;
m--;
}
}
j++;
if(j==n)
{
j=0;
}
}
for(i=0;i<n;i++)
{
if(a[i]==1)
printf("%d",i+1);
}
return 0;
}