回 帖 发 新 帖 刷新版面

主题:[讨论]猴子出队列的问题

大家帮忙看一下啊,这个程序我想了半天不知道什么地方有错误,
#include <stdio.h>
struct Mnokey
{
     int no;
     struct Monkey *next;
};
main()
{
    Monkey *link,*monkey,*lastMonkey;
    int totalMonkey,stride,count;
    printf("please input the total:\n");
    scanf("%d",&totalMonkey);
    printf("please input the digital of outsquee: \n");
    scanf("%d",&stride);

    //create link
    link=NULL;
    for(i=0;i<totalMonkey;i++)
    {
         monkey=new Monkey();
          monkey->no=i+1;
          if(link==NULL)
              link=lastMonkey=monkey;
          else
          {
               lastMonkey->next=monkey;
               lastMonkey=monkey;

          }

    }
    lastMonkey->next=link;
    count=1;
    printf("the list of out is :");
    while(link!=NULL)
    {
        if(link->next==link)
            printf("just hava only one :%4d",link->no);
         delete link;
         break;

    }
    if(count==stride-1)
    {
         monkey=link->next;
         link->next=monkey->next;
         printf("%4d",monkey->no);
         delete monkey;
         count=0;

    }
    link=link->next;
    count++;


        
}

、麻烦帮忙看一下啊!!!!!!!!!!!!!!111
 
 

回复列表 (共3个回复)

沙发

是不是建立链表的时候搞错了
我这里有个现成的程序
const int N=8;
const int K=2;
const int M=3;
#include<iostream.h>
struct Node
{
    int data;
    Node *next;
};
void main()
{
    Node *head=new Node;
    head->data=1;
    Node *p=head;
    for(int i=2;i<=N;i++)
    {
        p->next=new Node;
        p=p->next;
        p->data=i;
    }
    p->next=head;
    Node* q=p;
    p=head;
    i=1;
    while(i<=N)
    {
        cout<<p->data<<ends;
        p=p->next;
        i++;
    }
    cout<<endl;

    for(i=0;i<K-1;i++)
        q=q->next;

    while(q->next!=q)
    {
        for(i=0;i<M-1;i++)
            q=q->next;
        p=q->next;
        cout<<p->data<<ends;
        q->next=p->next;
        delete p;
    }
    cout<<q->data<<endl;
}

板凳

这个问题类似约瑟夫问题,是没有头节点的循环链表.下面的有点问题,,
while(link!=NULL)//在你的程序中,link=monkey,即它永远不可能为NULL,这是一个死循环``
 {
        if(link->next==link)
        {
         printf("just hava only one :%4d",link->no);//这里少了半个括号{
         delete link;
         break;
        }
    if(count==stride-1)
    {
         monkey=link->next;
         link->next=monkey->next;//这里应该是link=monkey->next
         printf("%4d",monkey->no);
         delete monkey;
         count=0;

    }
    link=link->next;
    count++;
}//大括号又少了吧}

我写的如下:
   if(link->next==link)
    {
       printf("just hava only one :%4d",link->no);//这里少了半个括号{
       delete link;
       break;
     }
   else
   while(link->next!=link)//当链表中只剩一个结点时,结束
  {
    if(count==stride-1)
    {
         monkey=link->next;
         link->next=monkey->next;//这里应该是link=monkey->next
         printf("%4d",monkey->no);
         delete monkey;
         count=0;

    }
    link=link->next;
    count++;
  }
  printf("%4d",link->no);//输出剩下最后一个结点

3 楼

``哦,,看错了````不用改,,就加个括号,,还有,,,循环中link->next=monkey->next;//这里应该是link=monkey->next,,,这个改改就可以了```没注意看哪,,``

我来回复

您尚未登录,请登录后再回复。点此登录或注册