C语言程序设计——猴子分桃要求:动物园里的N只猴子编号1,2,3,….,N,N只猴子排好队,队首的猴子可以到筐子里取桃子.当筐里为空时管理员便放入筐中一些桃子,第K次放入K个桃子.队首猴子取桃
来源:学生作业帮助网 编辑:作业帮 时间:2024/07/14 06:39:54
![C语言程序设计——猴子分桃要求:动物园里的N只猴子编号1,2,3,….,N,N只猴子排好队,队首的猴子可以到筐子里取桃子.当筐里为空时管理员便放入筐中一些桃子,第K次放入K个桃子.队首猴子取桃](/uploads/image/z/4381512-24-2.jpg?t=C%E8%AF%AD%E8%A8%80%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1%E2%80%94%E2%80%94%E7%8C%B4%E5%AD%90%E5%88%86%E6%A1%83%E8%A6%81%E6%B1%82%EF%BC%9A%E5%8A%A8%E7%89%A9%E5%9B%AD%E9%87%8C%E7%9A%84N%E5%8F%AA%E7%8C%B4%E5%AD%90%E7%BC%96%E5%8F%B71%2C2%2C3%2C%E2%80%A6.%2CN%2CN%E5%8F%AA%E7%8C%B4%E5%AD%90%E6%8E%92%E5%A5%BD%E9%98%9F%2C%E9%98%9F%E9%A6%96%E7%9A%84%E7%8C%B4%E5%AD%90%E5%8F%AF%E4%BB%A5%E5%88%B0%E7%AD%90%E5%AD%90%E9%87%8C%E5%8F%96%E6%A1%83%E5%AD%90.%E5%BD%93%E7%AD%90%E9%87%8C%E4%B8%BA%E7%A9%BA%E6%97%B6%E7%AE%A1%E7%90%86%E5%91%98%E4%BE%BF%E6%94%BE%E5%85%A5%E7%AD%90%E4%B8%AD%E4%B8%80%E4%BA%9B%E6%A1%83%E5%AD%90%2C%E7%AC%ACK%E6%AC%A1%E6%94%BE%E5%85%A5K%E4%B8%AA%E6%A1%83%E5%AD%90.%E9%98%9F%E9%A6%96%E7%8C%B4%E5%AD%90%E5%8F%96%E6%A1%83)
C语言程序设计——猴子分桃要求:动物园里的N只猴子编号1,2,3,….,N,N只猴子排好队,队首的猴子可以到筐子里取桃子.当筐里为空时管理员便放入筐中一些桃子,第K次放入K个桃子.队首猴子取桃
C语言程序设计——猴子分桃
要求:动物园里的N只猴子编号1,2,3,….,N,N只猴子排好队,队首的猴子可以到筐子里取桃子.当筐里为空时管理员便放入筐中一些桃子,第K次放入K个桃子.队首猴子取桃子的规则为:若猴子手中的桃子加上框中的桃子不足m个,就把筐中的桃子全部取走,并到队尾继续排队;如果满m个,猴子取足m个桃子,并且离队.筐里剩下的桃子由剩下的一位来取.
对于用户输入的任意N值,计算并输出N个猴子的离队序列.
C语言程序设计——猴子分桃要求:动物园里的N只猴子编号1,2,3,….,N,N只猴子排好队,队首的猴子可以到筐子里取桃子.当筐里为空时管理员便放入筐中一些桃子,第K次放入K个桃子.队首猴子取桃
#include
#include
#define N 10
#define M 20
struct monkey
{
int id;
int tao;
};
struct queue
{
struct monkey content[N];
struct monkey* head;
struct monkey* tail;
int length;
};
int queue_init(struct queue** q)
{
(*q) = (struct queue*)malloc(sizeof(struct queue));
(*q)->head = &(*q)->content[0];
(*q)->tail = &(*q)->content[0];
(*q)->length = 0;
return 0;
}
int queue_in(struct queue* q,struct monkey in)
{
if(q->length == 0)
{
*(q->tail) = in;
q->length++;
}
else
{
q->tail++;
*(q->tail) = in;
q->length++;
}
return 0;
}
int queue_out(struct queue* q, struct monkey* out)
{
int i = 0;
*(out) = *(q->head);
for(;i < q->length-1;i++)
q->content[i] = q->content[i+1];
q->tail--;
q->length--;
return 0;
}
//队首到队尾
int queue_a(struct queue* q)
{
struct monkey temp;
queue_out(q, &temp);
queue_in(q,temp);
return 0;
}
int main()
{
struct monkey data[N];
struct queue* q = NULL;
struct monkey temp;
int i;
int kuang = 0;
for(i=0;ilength);
printf("head %d\t tail %d\n",q->head->id,q->tail->id);
i = 0;
while(q->length != 0)
{
if(kuang == 0)
{
i++;
kuang += i;
}
//队首猴取桃
if(q->head->tao + kuang < M)
{
q->head->tao += kuang;
kuang = 0;
queue_a(q);
}
else
{
kuang -= M - q->head->tao;
q->head->tao += M - q->head->tao;
queue_out(q, &temp);
printf("%d\t%d\n",temp.id,temp.tao);
}
}
return 0;
}