C语言数组实现约瑟夫环
纪念一下我的第一篇博客,很菜见谅,欢迎讨论。
很长时间没有做题了,前几天做了一下老师布置的题目,数据结构还没怎么学懂,应该用链表来做的,最后还是用了数组。。
#include<bits/stdc++.h>
using namespace std;
const int maxn=3005;
int a[maxn];
int main(){
int n,p,count;
scanf("%d%d",&n,&p);
int i,j=1;
for(i=1;i<=n;i++){
a[i]=i;
} // 从1开始给数组赋值
i=0;
for(count=n;count>0;count--){ //count记录出局的次数,最终留下一个人
for(j=1;j<=p;j++){ //每一次过 p 人
i++; //下一个数
if(i>n) i=1; // 超过最大数目之后从头开始
if(a[i]==0){ // 出局的号码记录,然后跳过这个号码
j--;
}
}
printf("%d",a[i]);
if(count!=1){
printf(" ");
}
a[i]=0; //出局一人就把他的号码记录为 0
}
return 0;
}
小小吐槽:希望这次校选不会拉胯吧。。