| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 587 人关注过本帖
标题:一个用链表做踢人的功能,就是约瑟夫算法,看看吧
取消只看楼主 加入收藏
林浩
Rank: 2
等 级:论坛游民
帖 子:47
专家分:23
注 册:2011-1-12
结帖率:90.91%
收藏
已结贴  问题点数:10 回复次数:1 
一个用链表做踢人的功能,就是约瑟夫算法,看看吧
运行了下
  怎么就循环了一次。有些疑惑? 求解释  
#include<stdio.h>
#include<malloc.h>
#define NULL 0

struct person
{
    int num;
    struct person *next;
}a;

struct person *input(struct person *head)           //建立链表,对人编号,由1号到13号;
{
    int n=0;
    struct person *p1, *p2;
    p1=p2=(struct person *)malloc(sizeof(struct person));
    p1=&a;
    head=p1;
    printf("please input the bianhao:\n");
    while(++n<=13)
    {
        scanf("%d", &p1->num);
        if(n==13)
        {
            p1->next=NULL;
            break;
        }
        p2=p1;
        p1=(struct person *)malloc(sizeof(struct person));
        p2->next=p1;
    }
    return(head);
}

struct person *search(struct person *head, int n)   //0表示被提出,n记录剩下的人数,当剩一人时就退出while

{
    int k=1;
    struct person *p;
    p=head;
    while(n>1)
    {
            if(p->num!=0)
            {
                k++;
                p=p->next;
            }
            else
            {
                p=p->next;
            }
            if(k==3)
            {
                p->num=0;
                n--;   
                k=1;
                p=p->next;
            }
            if(p->next==NULL)
            {
                p=head;
                while(p->num==0)
                {
                    p=p->next;
                }
            }
    }

    return(head);
}

void main()
{
    struct person *head=NULL, *p=NULL;
    int i;
    head=input(head);
    p=search(head, 13);

    printf("the last number is:\n");
   
    for(i=0;i<13;i++)
    {
        if(p->num!=0)
        {
            printf("%d\n", p->num);
        }
        p=p->next;
    }
}
 
搜索更多相关主题的帖子: input 约瑟夫 
2011-03-17 13:37
林浩
Rank: 2
等 级:论坛游民
帖 子:47
专家分:23
注 册:2011-1-12
收藏
得分:0 
回复 楼主 林浩
嗯有道理
2011-03-17 18:38
快速回复:一个用链表做踢人的功能,就是约瑟夫算法,看看吧
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.011675 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved