A41035. 出圈
填空题
困难
知识点
题目描述
出圈
题目描述
设有n个人围坐一圈并按顺时针方向从1到n编号,从第1个人开始进行1到m的报数,报数到第个m人,此人出圈,再从他的下一个人重新开始1到m的报数,如此进行下去直到所剩下一人为止。
输入格式
输入多行,每行2个数,分别表示n和m.
输出格式
计算每一行中最后剩下这个人的编号.
样例输入
10 3
样例输出
4
参考答案
#include<stdio.h>
#include<stdlib.h>
int num(int * a,int n);
int main(void)
{
int n,m;
while(scanf("%d %d",&n,&m)!=EOF)//输入两变量
{
int * a=(int *)malloc(sizeof(int)*n);//申请内存储存数组
int j,i=m-1,p=2;
for(j=0;j<n;j++)
{
a[j]=1; //将数组中所有元素赋值为1
}
int x=0;
a[i]=0;
while(p>1) //循环出圈
{
x+=a[i];
if(x==m) //当x=m时,对应元素出圈,x归零
{
a[i]=0;
x=0;
}
if(i==n-1)
{i=-1;}
i++;
p=num(a,n); //数组元素求和
}
for(j=0;j<n;j++)
{
if(a[j]==1)
printf("%d\n",j+1);//输出最后得1的人的序号
}
free(a); //释放内存
}
return 0;
}
int num(int * a,int n)
{
int l,sum=0;
for(l=0;l<n;l++)
{
sum+=a[l];
}
return sum;
}
上一题
下一题