作业帮 > 综合 > 作业

C语言程序设计——猴子分桃

来源:学生作业帮 编辑:大师作文网作业帮 分类:综合作业 时间:2024/10/05 13:32:04
C语言程序设计——猴子分桃
要求:动物园里的N只猴子编号1,2,3,….,N,N只猴子排好队,队首的猴子可以到筐子里取桃子.当筐里为空时管理员便放入筐中一些桃子,第K次放入K个桃子.队首猴子取桃子的规则为:若猴子手中的桃子加上框中的桃子不足m个,就把筐中的桃子全部取走,并到队尾继续排队;如果满m个,猴子取足m个桃子,并且离队.筐里剩下的桃子由剩下的一位来取.
对于用户输入的任意N值,计算并输出N个猴子的离队序列.
C语言程序设计——猴子分桃
#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;
}