标题:帮忙找一下原因--猴子选大王
只看楼主
wangyf
Rank: 2
等 级:论坛游民
帖 子:40
专家分:45
注 册:2009-6-27
结帖率:100%
已结贴  问题点数:20 回复次数:14 
帮忙找一下原因--猴子选大王
为什么输入6,5会出现2?应该是一~~~
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
struct M
{
    int num;
    struct M *next;
};
int main(void)
{
    int i, j, n, t;
    struct M *p, *q, *head;
    p = (struct M*)malloc(sizeof(struct M));
    printf("The number of monkeys: ");
    scanf("%d", &n);
    printf("The amount of count: ");
    scanf("%d", &t);
    for(i = 1;i <= n;i++)
    {
        q = (struct M*)malloc(sizeof(struct M));
        q->num = i;
        if(i == 1) head = q;
        p->next = q;
        p = q;
    }
    p->next = head;
    p = head;
    for(i = 0;i <= n-2;i++)
    {
        for(j = 0;j <= t-1;j++)
        {
            q = p;
            p = p->next;
        }
        q->next = p->next;
        free(p);
        p = q;
    }
    printf("The king: %d\n", p->num);
    return 0;
}
谢谢
搜索更多相关主题的帖子: 大王 猴子 
2009-08-12 13:43
UserYuH
Rank: 12Rank: 12Rank: 12
来 自:毅华
等 级:火箭侠
威 望:8
帖 子:720
专家分:3300
注 册:2009-8-10
得分:0 
没玩过猴子,也没看过猴子选大王,看你的程序看不出所以然来,又没一个比较语句,
能说下游戏规则吗?

努力—前进—变老—退休—入土
2009-08-12 13:56
wangyf
Rank: 2
等 级:论坛游民
帖 子:40
专家分:45
注 册:2009-6-27
得分:0 
是有n个猴子,从第一个开始,每过t个猴子删去一个猴子,知道只剩一个猴子就是大王
2009-08-12 14:35
Sean仔
Rank: 2
等 级:论坛游民
帖 子:17
专家分:79
注 册:2009-8-10
得分:0 
有没原题?ACM的?把题目贴出来可以吗?要不不知道个所以然来很难一起讨论~
2009-08-12 14:52
xingchen88
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2009-8-12
得分:0 
没有看懂。。
2009-08-12 15:19
wangyf
Rank: 2
等 级:论坛游民
帖 子:40
专家分:45
注 册:2009-6-27
得分:0 
猴子选大王:n只猴子围成一圈,顺序编号。从第一只开始报数(从1到t报数),凡报到t的猴子退出圈子,然后从下一个人重新开始,最后留下的那个猴子就是大王,请问按照这种规则,选出的猴子是原来编号为第几号的猴子。
2009-08-12 15:48
xiaoyuer110
Rank: 2
等 级:论坛游民
帖 子:37
专家分:17
注 册:2009-7-29
得分:0 
谭浩强书中有一个例子~!自己去看一下吧~!

除学者!不是败给程序不懂!而是编的时候不够心细!
2009-08-13 00:02
UserYuH
Rank: 12Rank: 12Rank: 12
来 自:毅华
等 级:火箭侠
威 望:8
帖 子:720
专家分:3300
注 册:2009-8-10
得分:20 
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
struct M
{
    int num;
    struct M *next;
};
int main(void)
{
    int i, j, n, t;
    struct M *p, *q, *head,*w;  /*加了个struct M 指针w*/
    p = (struct M*)malloc(sizeof(struct M));
    printf("The number of monkeys: ");
    scanf("%d", &n);
    printf("The amount of count: ");
    scanf("%d", &t);
    for(i = 1;i <= n;i++)
    {
        q = (struct M*)malloc(sizeof(struct M));
        q->num = i;
        if(i == 1) head = q;
        p->next = q;
        p = q;
    }
    p->next = head;
    p = head;
    w=head;     /*多加的*/
    for(i = 0;i <= n-2;i++)
    {
        for(j = 0;j <= t-1;j++)
        {
            q = p;
        p = p->next;
        if(w->next!=q&&w!=q)w=w->next; /*这里加了条判断语句,你之前的数到的猴子可是没删对*/
        }
    w->next = p;               /*所以你之前显示的不是真的猴王*/
    }
    printf("The king: %d\n", p->num);
    return 0;
}
收到的鲜花
  • wangyf2009-08-13 17:17 送鲜花  3朵   附言:我很赞同

努力—前进—变老—退休—入土
2009-08-13 00:48
soler
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:181
专家分:1077
注 册:2005-7-16
得分:0 
还没用链表做过这道题,标记一下,明天来看看,
2009-08-13 01:46
sjzunter
Rank: 2
等 级:论坛游民
帖 子:15
专家分:26
注 册:2009-7-16
得分:0 
#include<stdio.h>
void main()
{
    int i,k,m,n,num[50],*p;
printf("input number of mouse:");
scanf("%d",&n);
p=num;
for(i=0;i<n;i++)
*(p+i)=i+1;
i=0;
k=0;
m=0;
while(m<n-1)
{
    if(*(p+i)!=0)
        k++;
    if(k==3)
    {
        *(p+i)=0;
        k=0;
        m++;
    }
    i++;
    if(i==n) i=0;
}
while(*p==0)
p++;
printf("The last one is no.%d\n",*p);
}
2009-08-13 10:30



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-282369-1-1.html




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

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