| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 558 人关注过本帖
标题:猴王问题 怎么大于14就不行了那
只看楼主 加入收藏
一蓑烟雨
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2010-11-20
结帖率:80%
收藏
已结贴  问题点数:5 回复次数:2 
猴王问题 怎么大于14就不行了那
某森林中有n只猴子商量选猴王问题,所有猴子围坐在一圈,先从第一只猴子开始报数,报道13的猴子出列,紧接着下一个猴子进行新的一轮报数,报道12的猴子出列;依次重复下去,每一轮报数都比上一轮少1,直到报到数减为一之后,又从13开始报数,直到剩下一只猴子为止,这个猴子就是猴王。

#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status;
typedef int Elemtype;
typedef struct Cnode
{
    Elemtype data;
    struct Cnode *next;
}CNode;


struct Cnode* Creat_clist(CNode*clist,int n)
{
    CNode *p,*q;
    int i;
    clist=NULL;
    for(i=n;i>=1;i--)
    {
        p=(CNode*)malloc(sizeof(CNode));
        if(!p)   exit(OVERFLOW);    //内存分配失败
        p->data=i;
        p->next=clist;
        clist=p;
        if(i==n)
            q=p;       //用q指向链表最后一个节点
    }
     q->next=clist;   //构成循环链表
     return clist;    //clist即为指向第一个节点的指针

}

Status Kingmonkey(CNode*clist)
{
    CNode *p,*q,*l;
    p=clist;
    int m,i;m=13;
    do
    {
        for(i=1;i<m-1;i++)
        { p=p->next; }
        q=p->next;      //q节点为要删除的节点

        p->next=q->next;
        p=p->next;
        printf("输出要删除的节点:%d \n",q->data);
        free(q);
        m--;
        i=1;
        if(m==1&&p->next!=p)
        {
            l=p;
            p->next=l->next;
            p=p->next;
            printf("输出要删除的xxxxx节点:%d",l->data);
            free(l);
            m=13;
        }
    }while(p!=p->next);
    printf("猴王是:%d",p->data);
    return OK;
}

void main()
{
    int qua;
    printf("输入猴群的数量:\n");
    scanf("%d",&qua);
    CNode *monkey;   
    monkey=NULL;
    monkey=Creat_clist(monkey,qua);   //建立猴群的循环链表
    Kingmonkey(monkey);
}
搜索更多相关主题的帖子: 猴王 
2011-03-25 18:58
loveshuang
Rank: 9Rank: 9Rank: 9
来 自:湖北武汉
等 级:蜘蛛侠
帖 子:270
专家分:1198
注 册:2010-11-14
收藏
得分:5 
稍作修改希望可以帮到你。
指针在传递时没有分配空间的话最好用引用传递防止在函数中改变它的地址,没有初始化的指针千万不能赋值,切记切记!!!
#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status;
typedef int Elemtype;
typedef struct Cnode
{
    Elemtype data;
    struct Cnode *next;
}* Link,CNode;


Status Creat_clist(Link& clist,int n)
{
    CNode *p,*q;
    int i;
    clist=(Link)malloc(sizeof(CNode));
    clist->data=1;
    clist->next=NULL;
    for(i=n;i>1;i--)
    {
        p=(Link)malloc(sizeof(CNode));
        if(!p)   exit(OVERFLOW);    //内存分配失败
        p->data=i;
        p->next=clist->next;
        clist->next=p;
        if(i==n)
            q=p;       //用q指向链表最后一个节点
    }
     q->next=clist;   //构成循环链表
    // return clist;    //clist即为指向第一个节点的指针
     return OK;

}

Status Kingmonkey(Link& clist)
{
    CNode *p,*q;
    p=clist;
    int m,i;
    m=13;
    do
    {
        for(i=1;i<13;i++)
        {
            int n=m;
            while(n-->2)
                p=p->next;
            q=p->next;   
            if(q==clist)
                clist=q->next;
            p->next=q->next;
            p=p->next;
            printf("输出要删除的节点:%d \n",q->data);
            free(q);
            m--;

            if(m==1)
            {
                m=13;
                break;
            }
            if(p->next==p)
                break;
        }
    }while(p->next!=p);
    printf("猴王是:%d\n",p->data);
    return OK;
}

void main()
{
    int qua;
    printf("输入猴群的数量:\n");
    scanf("%d",&qua);
    Link monkey;   
    //monkey=NULL;
    Creat_clist(monkey,qua);   //建立猴群的循环链表
    Kingmonkey(monkey);
}
2011-03-26 02:56
一蓑烟雨
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2010-11-20
收藏
得分:0 
谢谢啦  
对您花费的时间感到非常的感谢
2011-03-26 13:17
快速回复:猴王问题 怎么大于14就不行了那
数据加载中...
 
   



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

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