当前位置: 代码迷 >> C语言 >> 猴子报大王的程序怎么编啊
  详细解决方案

猴子报大王的程序怎么编啊

热度:334   发布时间:2005-04-13 13:22:00.0
猴子报大王的程序怎么编啊
就是有一群猴子,报1234,报1的猴子再站出来,再报1234,就这样,选出最后一个报一的猴子
搜索更多相关的解决方案: 大王  猴子  

----------------解决方案--------------------------------------------------------
题目意思都还没看懂。说清楚点!!!
----------------解决方案--------------------------------------------------------
约瑟夫问题,最简单的办法是循环队列模拟
----------------解决方案--------------------------------------------------------
我用数组做过   不过程序没了
数组全部设 1     报1 的猴子设置成0  
----------------解决方案--------------------------------------------------------
#include<iostream>          //本程序是进行循环链表的基本运算
#include<stdlib.h>          //首先设立一个计数器,当数到3时就进行筛选,剩下的最后一个就是首领      
#define N 7               
using namespace std;
struct node{int data;
            node *next;
};
node* creat(void)           //建立循环链表
{node *head,*p; int i;
head=(node*)malloc(sizeof(node));
head->data=1;
head->next=head;
for(i=N;i>1;i--)
{p=(node*)malloc(sizeof(node));
  p->data=i;
  p->next=head->next;
  head->next=p;
}
return head;
}
void output(node *head)  //输出循环链表
{node *p;
p=head;
cout<<"循环链表的数字;\n";
do{cout<<p->data<<endl;p=p->next;
}while(p!=head);
}
void play(node *head,int n)  //进行筛选
{node *p,*q; int k=N,c=1;//c是计数器   
p=head;
cout<<"筛选的数字:\n";
while(k>1)
{if(c==n-1)
{q=p->next;cout<<q->data<<endl;
p->next=q->next;
free(q);
c=0;k--;
}
else {c++;p=p->next;}
}
cout<<"首领:"<<p->data<<endl;
}
void main()
{node *head;
head=creat();
output(head);
play(head,3);
}
----------------解决方案--------------------------------------------------------
我发的就是楼主想要的程序,经过验证的,绝对正确
----------------解决方案--------------------------------------------------------
五楼的好像是用c++嘛
----------------解决方案--------------------------------------------------------
没有用面向对象,只能说用了c++的cin和cout对象啊
----------------解决方案--------------------------------------------------------
呵呵,他想要C的解决办法
----------------解决方案--------------------------------------------------------

我用数组的方法写了一个,好像有点笨拙。。 #include <stdio.h> #include <conio.h>

#define MONKEY_NUMBER 20

int main() { /* 创建一个猴子列队 */ int monkeys[MONKEY_NUMBER]; /* 在队列中的猴子数目 */ int monkey_in_queue=MONKEY_NUMBER; /* 初始化猴子的编号 */ register int i; int id,counter=1; for(i=0;i<MONKEY_NUMBER;monkeys[i++]=i+1); /* 模拟报数 */ for(i=0;i<MONKEY_NUMBER;i++) { if(counter==1&&monkeys[i]!=-1) { monkeys[i]=-1; monkey_in_queue--; counter++; } else if(monkeys[i]!=-1&&counter<=4) {counter++;} if(counter==4) {counter=1;} if(monkey_in_queue>1&&i+1>=MONKEY_NUMBER) i=-1; } /* 输出结果 */ for(i=0;i<MONKEY_NUMBER;i++) { if(monkeys[i]!=-1) { id=i; printf("@"); } else { printf("-"); } } printf("\nThe %d monkey is the last monkey in the queue.\n",id); getch(); return 1; }


----------------解决方案--------------------------------------------------------
  相关解决方案