约瑟夫环问题:有n个人围成一圈。从第一个人开始报数(从1到m报数),凡报到m的人退出圈子,问最后留下的是原来的第几号的那个人?(编程提示:根据人数动态建立数组。假设每次从下标为i得元素开始数数,那么需要删除的是下标为(i+m-1)%n,直到n为1就是留下的那个人)
#include <stdio.h>
int main(void) {
int n,m;
//输入n和m
scanf("%d %d",&n,&m);
//根据人数动态建立数组
int num = n;
int arr[1000];
for(int i=0;i<n;i++){
arr[i]=i+1;
}
//循环删除下标为(i+m-1)%num,直到num为1
int i=0,j;
while(num > 1){
for(j=(i+m-1)%num;j<num-1;j++){
arr[j]=arr[j+1];
}
i=(i+m-1)%num;
num--;
}
printf("%d",arr[0]);
return 0;
}