Advertisement

苦练基本功1号三种方法实现约瑟夫环问题

阅读量:

约瑟夫环问题描述

假设有n个人围成一个环形,按照一定的顺序进行编号,从第一个个体开始依次进行计数,计数范围为1至m。每当有人数达到m时,该个体将被淘汰出圈。随后继续进行下一轮计数,最终需要确定的是,最终留在圈内的是最初编号为多少的个体?

2.数组实现

采用一个长度为n的数组来保存所有个体的编号信息,对于已经退出的个体,将其对应的编号设置为0。当有n-1个个体被移除后,数组中唯一剩余的非零编号即为所求的结果。

复制代码
 #include <stdio.h>

    
  
    
 void left_num(int* a,int n,int m) {
    
     int out = 0,count = 0,i = 0;    //out为出去的人数,count为报数,i为目前报到第几个人
    
     int *p = a;
    
     int num = 0;
    
     for(num = 0;num < n;num++) {
    
     *(a+num) = num+1;
    
     }   //为n个人编号1-n
    
     while (out < n-1) {
    
     if (*(p+i) != 0) {
    
         count ++;   //不等于0才报数+!
    

全部评论 (0)

还没有任何评论哟~