• (顺序表的应用5.4.2)POJ 1591 M*A*S*H(约瑟夫环问题的变形——变换步长值)


    /*
     * POJ_1591_2.cpp
     *
     *  Created on: 2013年10月31日
     *      Author: Administrator
     */
    #include <iostream>
    #include <cstdio>
    
    using namespace std;
    
    const int maxn = 55;
    int cards[25];
    bool position[maxn];
    
    int main(){
    	int participants,lucky;
    
    	int counter = 1;
    	while(scanf("%d%d",&participants,&lucky)!=EOF){
    		int i,j;
    		for(i = 0 ; i < 20 ; ++i){
    			scanf("%d",&cards[i]);
    		}
    
    		int left_num = participants;
    		memset(position,1,sizeof(position));
    
    		for(i = 0 ; left_num > lucky ; ++i){//在left_num>lucky的情况下,不断的扫卡片数组
    			int k = 0;//标记数了多少个人
    			for(j = 0 ; (j <participants) && left_num > lucky ; ++j ){//扫position[]数组
    				if(position[j]){//如果这一个人还在队列里面
    					if(++k == cards[i]){//如果书到了卡片中要求的数字
    						--left_num;//幸存者的人数-1
    						k=0;
    						position[j] = false;//那个人出队
    					}
    				}
    			}
    		}
    
    		if(counter != 1){
    			printf("
    ");
    		}
    		printf("Selection #%d
    ",counter++);
    		for(i = 0 ; i < participants ; ++i){
    			if(position[i]){
    				printf("%d ",i+1);
    			}
    		}
    		printf("
    ");
    
    	}
    
    	return 0;
    }
    
    
    
    


  • 相关阅读:
    dup/dup2函数
    read/write函数
    lseek函数
    流程控制
    vim普通模式
    vim实用技巧1
    python源代码解读
    python变量命名规则
    python之字符串2
    Docker系列文章
  • 原文地址:https://www.cnblogs.com/james1207/p/3400430.html
Copyright © 2020-2023  润新知