缘起:普及练习场-线性数据结构-约瑟夫问题

先上代码

#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速度,也就是发现代码中问题以及解决问题的速度

题目地址