约瑟夫环

来源:互联网 发布:淘宝评论100字好评 编辑:程序博客网 时间:2024/05/16 18:48

#include <iostream.h>
#include <stdlib.h>

struct Boy
{
 int number;
 int secret;
};
typedef Boy DataType;  //定义具体问题元素的数据类型
#include "SeqList2.h"

void main(void)
{
 SeqList myList(10);
// Boy boy[7]={{1,3},{2,1},{3,7},{4,2},{5,4},{6,8},{7,4}};
// Boy boy[7]={{1,1},{2,1},{3,2},{4,3},{5,4},{6,5},{7,6}};
 Boy boy[7]={{1,1},{2,1},{3,1},{4,1},{5,1},{6,1},{7,1}};
 int i,size,next;
 int m=2;//m是开始时任意给定的报数上限值
 int k=0;//是每次第下一个报数的人在顺序表中的下标,
 //编号为1的人下标为0
 for(i=0;i<7;i++)
  myList.Insert(boy[i],i);
 do{
  size=myList.Size();     //现在链表中的人数
        next=m%size;  
        if(next==0)  //如果m与现在链表中的人数相等
   next=myList.Size();
  next-=1;//next是第一个报数的人与出列人之间的间隔数
  k=k+next;
  
  if(k>=myList.Size())  //确认k没有越界
   k=k-myList.Size();
  
  DataType temp=myList.Delete(k); //在链表中删去出列人
                                        //而他的信息保留在temp变量中
  cout <<k<<"/t"<<temp.number<<"/t";  //输出答案  
  cout <<temp.secret<<"/t"<<endl;
  
  m=temp.secret;//将出列人的密码赋绘m
 }while(myList.Size()>0);
}

原创粉丝点击