zoukankan      html  css  js  c++  java
  • 约瑟夫环(Joseph)的高级版(面向事件及“伪链表””)

    约瑟夫环问题:
    在一间房间总共有n个人(下标0~n-1),只能有最后一个人活命。

    按照如下规则去杀人:

      • 所有人围成一圈
      • 顺时针报数,每次报到q的人将被杀掉
      • 被杀掉的人将从房间内被移走
      • 然后从被杀掉的下一个人重新报数,继续报q,再清除,直到剩余一人
      • 要求模拟这个问题
    #include<stdio.h>
    #include<malloc.h>
    
    void Joseph(int count,int doom);
    
    void Joseph(int count,int doom){
        int alive = count;      //幸存人数;
        int curIndex = 0;            //当前下标;
        int preIndex = count -1;  //前一个人下标;
        int index;
        int *circle = NULL;
        
        circle = (int *)malloc(sizeof(int) * count);
        for(index = 0;index < count; index++){
            circle[index] = (index + 1) % count;    //初始化链表;
        }
        while(alive > 0){
            int  num = doom % alive  -1;   //直接计算出需要移动的人数,定位要出圈的人;
            for(index = 0; index < (num == -1 ? alive - 1 : num);index++){
                preIndex = curIndex;
                curIndex = circle[curIndex];    //该人出圈;
                //curIndex++;
            }
            printf("%d
    ",curIndex + 1);
            alive--;
            circle[preIndex] = circle[curIndex];  //真正的出圈操作;
            curIndex = circle[curIndex];      //继续处理下一个人;
            
        }
        free(circle);
    }
    
    int main(){
        int count;
        int doom;
        
        printf("请输入总人数,厄运数 :");
        scanf("%d%d",&count,&doom);
        Joseph(count,doom);
        
        return 0;
    } 
    
  • 相关阅读:
    php 接触
    PHP Session可能会引起并发问题
    PHP大神的十大优良习惯
    PHP开发经验总结
    php命令行用法简介
    Python正则表达式指南
    PHP开发经验总结
    PHP命名空间概念解析
    高性能Web框架Zend Framework
    PHP代码优化技巧大盘点
  • 原文地址:https://www.cnblogs.com/youdiaodaxue16/p/9016401.html
Copyright © 2011-2022 走看看