zoukankan      html  css  js  c++  java
  • C++ 模拟报数

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

    先上代码

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

    题目地址

  • 相关阅读:
    数字校验1
    数字校验
    千分位保留4位小数
    如何把一个字符串格式化位4位一个空格
    from里button会提交表单
    重新学习JavaScript2015年11月3日
    java设计模式之代理模式
    自定义标签 (choose)
    自定义标签 foreach
    获取一个表格的一行的值
  • 原文地址:https://www.cnblogs.com/zbsy-wwx/p/11680734.html
Copyright © 2011-2022 走看看