约瑟夫环

原创 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);
   }
 



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

在32位程序中如何实现进程间通讯

1、引言 在Windows程序中,各个进程之间常常需要交换数据,进行数据通讯。WIN32 API提供了许多函数使我们能够方便高效的进行进程间的通讯,通过这些函数我们可以控制不同进程间的数据交换,就如同...
  • saliven
  • saliven
  • 2001-03-09 13:12:00
  • 969

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

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

史上最全的约瑟夫环算法程序和原理

数学算法:#include "stdio.h"#include "stdlib.h"int josephus(int n, int m){    int pos;    if (n == 1) {  ...
  • ZhengKarl
  • ZhengKarl
  • 2010-05-15 21:47:00
  • 33072

最简化约瑟夫环问题的递归算法详细解析

这个问题可能每个学算法的同学都会遇见,我没那么聪明,第一次看见时做不出来,只发现一些规律,后面看到算法也挺久才看懂,这里是将别人的算法结果做一个解析,例子是暂时网上找的递归最简洁的例子: 下面就以这个...
  • m15682532244
  • m15682532244
  • 2017-10-21 15:54:28
  • 604

MFC约瑟夫环

  • 2008年01月08日 22:06
  • 1.84MB
  • 下载

约瑟夫环问题--递归推导

本文为学习《剑指offer》的记录。因其原理在原作者博客上找不到,所以,只能自己编写记录,如有不当之处,欢迎指正。题目描述: n个数,编号为 0 , 1, ……, n-1 排成一个圆圈,从数字 0 ...
  • u014613043
  • u014613043
  • 2016-03-16 15:43:23
  • 1371

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

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

约瑟夫环约瑟夫环约瑟夫环

  • 2009年10月06日 23:51
  • 2KB
  • 下载

约瑟夫环问题的两种解决方式(递归求解和数组模拟求解)

约瑟夫环问题各位Acmer肯定都遇到过,就是给你编号为从0~n-1的n个人,从头开始报数,报到m的人离场,问最后留下的人是几号。有两种方法解决这个问题 第一种:数组模拟 这种方法没什么好说的,就是模拟...
  • Sara_YF
  • Sara_YF
  • 2016-06-19 13:03:26
  • 1207

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

 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:21
  • 7437
收藏助手
不良信息举报
您举报文章:约瑟夫环
举报原因:
原因补充:

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