缘起:普及练习场-线性数据结构-约瑟夫问题
先上代码
#include<cstdio>
#include<iostream>
using namespace std;
int data[101];//数据
int n,m;
int index;
int count=0;
int main(){
//cout<<"TEST: "<<10%9<<endl;
cin>>n>>m;
for(int i=0;i<n;i++){
data[i]=i;
}
index=1;
for(int i=0;i<n;i++){
//cout<<"TEST:"<<i<<endl;
for(int j=index;true;j++){
if(j>n){
//cout<<"I:"<<i<<",N:"<<n<<endl;
index=j-n;
//cout<<"index:"<<index<<endl;
//count=0;
i--;
break;
}
int number=data[j];
if(number==-1){
continue;
}
//cout<<"TEST:"<<i<<","<<count<<endl;
count++;
//cout<<"count:"<<count<<",i:"<<j<<endl;
if(count==m){
data[j]=-1;
cout<<j<<" ";
count=0;
index=j;
break;
}
}
}
}
/**
int 遍历位置=0;
剩下的人报数一次:
int 报数的值=0;
for(int i=遍历位置;i<n;i++){
//遍历单个人
这个人的编号=data[i];
if(这个人的编号==-1){//已经报数了
continue;//跳过
}
//报数
报数++;
if(报数的值>n) {//报数的值超过了总人数
报数的值=0;//重置报数人数
break;//这次报数结束
}
if(报数的值==m){
data[i]=-1;
cout<<报数的值+" "<<endl; //报数
遍历位置=i;
break;
}
}
*/
一开始怎么都没过,后来在zhx大佬的指点下,终于明白自己连题都没看懂(之前我以为只需要循环报数一次)
虽然题目看起来挺简单,但是做题的过程中还是有很多需要考虑的地方的。重点是DEBUG速度,也就是发现代码中问题以及解决问题的速度