大一,还没学递归,想了半天才想出来咋写。
分享一下,有不足请指出。
题目(Description):
n个人围成一圈,顺序排号为1到n。从第一个人开始,1到m报数,凡报数到m的人退出圈子,问最后留下的是原来的第几号。
例如:5个人,数到2退出。依次退出的顺序是2、4、1、5,则最后留下来的是3号。
输入(Input):
任意2个正整数n和m,1<m≤n<20,数据之间用空格隔开。
#include <stdio.h>
int main(int argc, char *argv[]) {
int n,m,i=0,j=0,b;
int a[1000]={0};
scanf("%d %d",&n,&m);
for(i=0;i<n;i++)
a[i]=1+i;
i=0;
while(n>1){
if((i+1)%m==0)
{n--;a[i]=0;}
if(a[i]!=0)
{a[b+j]=a[i];a[i]=0;j++;}
i++;
}
for(i=0;i<1000;i++)
if(a[i]!=0)
printf("%d",a[i]);
return 0;
}