
#include<stdio.h>
#include<string.h>
int main(){
int n;
while(scanf("%d",&n)!=EOF){
int m;
scanf("%d",&m);
int s[10001];
int i;
for(i=0;i<n;i++){
s[i]=i+1;
}//先给每一个人编号 从1~n
int j,r,k;
for(i=n-1;i>=0;i--){//每次循环结束会少一个人,最后i=0的时候留下来的就是那个人的编号
for(j=1;j<=m;j++){//每m个一循环 ,m是规定的爆炸的数字(淘汰的数字)
k=s[0];
for(r=0;r<i;r++){
s[r]=s[r+1];//第一个放到最后面,后面依次往前进一
}
s[r]=k;
} //结束这次循环之后,在最后的那个就是第m个,是要被淘汰的,后面由于i--,所以这个被淘汰的就不会再参与后续的筛选
}
printf("%d\n",s[0]);//到最后的在前面
}
return 0;
}
本文描述了一个用C语言编写的程序,实现了一种基于冒泡排序的淘汰法,用于给一组人数动态变化的群体编号,每m个人中淘汰一人,直到只剩最后一个人。
2620

被折叠的 条评论
为什么被折叠?



