测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

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; }
上一题 下一题