约瑟夫环

原创 2007年10月14日 21:59:00
数据结构上机作业,约瑟夫环问题
     编号为1,2,3.......n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数).一开始任选一个整数作为报数上限值m,从第一个人开始顺时针自1开始顺序报数,报到m时停止报数,报m的人出列,将他的密码作为新的m值 ,从他的顺时针方向上的下一个人开始重新从1报数,如此下去,直至所有的人全部出列为止.试设计一个程序,求出列顺序.
     利用单向循环链表作为存储结构模拟此过程,按照出列顺序打印出各人的编号.
     例如m的初值为20;n=7,7个人的密码依次是3,1,7,2,4,8,4,出列顺序为6,1,4,7,2,3,5.
    
     我的C程序如下:
#include<stdio.h>
typedef struct node
{
 
    int data;
    int number;
    struct node *next;
 }Node,*LinkList;
 
 
   LinkList CreateJoseph(int n)
 {
    int i=1;
    Node *p,*r;
    LinkList L=NULL;
    L->next=NULL;
    if(n<1) exit(0);
    for(i=1;i<=n;i++)
     {
        r=(Node*)malloc(sizeof(Node));
        printf("/n please input %d'password:",i);
        scanf("%d",&r->data);
        r->number=i;
        if(i==1)
          {
            L=r;
            p=r;
          }
        else
           {
            p->next=r;
            p=r;
           }
      }
 
      p->next=L;
      return L;
 }
 
 void DestoryJoseph(LinkList L,int m)
   {
 
      Node *p,*q;
      int j=1;
      printf("/n Sequence:");
      p=L;
      while(p->next!=p)
      {
 
          while(j!=m-1)
          {
            p=p->next;
            j++;
          }
          q=p->next;
          p->next=p->next->next;
          printf("%d",q->number);
          m=q->data;
          free(q);
          j=0;
      }
      printf("%d",p->number);
      free(p);
      getch();
   }
 
 
   int main()
   {
     int n,m;
     LinkList L;
     printf("total number of the Joseph ring :");
     scanf("%d",&n);
     L=CreateJoseph(n);
     printf("/n initial the up-limit m:/n");
     scanf("%d",&m);
     DestoryJoseph(L,m);
   }
 



没有用头结点,反而更方便些.

约瑟夫环C++实现很经典的做法

原文地址:http://www.cnblogs.com/hanxi/archive/2012/10/10/2718413.html /* *******循环链表解决约瑟夫环问题******* * 问...
  • jzh1988903
  • jzh1988903
  • 2014年10月07日 14:52
  • 2309

约瑟夫环 java实现

问题: N个人从1到N编号,围城一圈,从1开始报数, 数到X时,将X的编号输出,并将那个人踢出, 下一个从1再开始报数,直到所有人都出去 思路: 就是计数,移除,没有太深的思想,直接上代码: pac...
  • smile0198
  • smile0198
  • 2014年04月30日 09:27
  • 3121

约瑟夫环(数学高效率解法,很详细)

 5.5.4 用数学方法解约瑟夫环(1) 原文copy:http://book.51cto.com/art/201403/433941.htm 5.5.4  用数学方法解约瑟夫环(1...
  • qq_25973267
  • qq_25973267
  • 2015年12月25日 22:49
  • 4630

约瑟夫环的链表解法和数学解法

约瑟夫环(Josephus)问题是由古罗马的史学家约瑟夫(Josephus)提出的,他参加并记录了公元66—70年犹太人反抗罗马的起义。约瑟夫作为一个将军,设法守住了裘达伯特城达47天之久,在城市沦陷...
  • haishu_zheng
  • haishu_zheng
  • 2013年12月09日 11:42
  • 14108

【算法设计】约瑟夫环

本科系列课程参见:《软件学院那些课》 问题描述 约瑟夫(Joeph)问题的一种描述是:编号为1,2,…,n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。一开始任选一个正整数作为报数上限...
  • xiaowei_cqu
  • xiaowei_cqu
  • 2013年02月21日 14:20
  • 8416

C++第15周项目3 -约瑟夫环

课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565,本周题目链接:http://blog.csdn.net/sxhelijia...
  • sxhelijian
  • sxhelijian
  • 2013年06月08日 07:22
  • 6869

hdu 1443 Joseph (约瑟夫环)

Joseph Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Su...
  • u013446688
  • u013446688
  • 2015年01月23日 17:18
  • 894

两种方法实现约瑟夫环(链表,顺序表)

//两种方法解决约瑟夫问题:顺序存储结构,循环单链表, //测试数据:a,b,c,d,e,f,g,h,i,j,n=10;从第2个开始,数到5即:s=2,m=5 //结果f,a,g,c,j,i,b,e,...
  • TFLiu666
  • TFLiu666
  • 2017年03月27日 20:58
  • 478

用java语言实现约瑟夫环(方法一)

import java.util.Scanner; /*  * 500个小孩围一圈,数到3的退出,问剩下最后的小孩原来是多少号?  * author@  * */ public class Yue...
  • liu048074leiliu
  • liu048074leiliu
  • 2015年04月07日 15:42
  • 574

C++经典题目:约瑟夫环问题

问题描述: 有n个人围成一圈,顺序排号。从第一个人开始报数(1~3报数),凡报到3的人退出圈子,问最后留下的人原来排在第几号。 分析: 首先由用户输入人数n,然后对这n个人进行编号【因为如果不编号的话...
  • QianShouYuZhiBo
  • QianShouYuZhiBo
  • 2013年09月26日 23:48
  • 2987
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:约瑟夫环
举报原因:
原因补充:

(最多只允许输入30个字)