爱问知识人 爱问教育 医院库

约瑟夫问题

首页

约瑟夫问题

设有n个人围成一圈,每个人的编号依次1,2,3...n。现从编号为k的人开始报数, 
报到m的人出列,再从出列的下一个人开始重新报数,报到m的人又出列,以此类推,直到所有人都出列,求这n个人的出列顺序. 
用C语言编写算法,将结果以顺序表和单链表两种方法分别实现
注意:这种约瑟夫问题没有所谓的"输入密码"! 

提交回答
好评回答
  • 2007-11-04 22:39:16
      #include 
    #include
    typedef struct list 
    { 
    int data; 
    struct list *next; 
    }linklist; 
    void main() 
    { 
    int n,m,k,i=1; 
    linklist head,*p,*q,*l; 
    printf("enter n:\n"); 
    scanf("%d",&n); 
    printf("enter m:\n",&m); 
    scanf("%d",&m); 
    printf("enter k:\n",&k); 
    scanf("%d",&k); 
    l=&head; 
    p=l; 
    for(;inext=q; 
    q->data=i; 
    p=q; 
    } 
    p->next=l->next; /*创建循环表*/ 
    p=l->next; 
    for(i=1;inext; 
    while(p->data!=p->next->data) 
    { 
    for(i=1;inext; 
    q=p->next; 
    printf("%3d",q->data); 
    p->next=q->next; 
    p=q->next; /*p指向第k+1个人的位置*/ 
    free(q); /*释放空间*/ 
    } 
    printf("%3d\n",p->data); 
    free(l); 
    free(p); 
    } 。
      

    佑***

    2007-11-04 22:39:16

其他答案

类似问题

换一换
  • C/C++ 相关知识

  • 电脑网络技术
  • 电脑网络

相关推荐

正在加载...
最新问答 推荐信息 热门专题 热点推荐
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200

热点检索

  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 178-197
返回
顶部
帮助 意见
反馈

确定举报此问题

举报原因(必选):