某超市进行大米促销,每人限购一袋。现在有50人来排队购买,每个人购买后如果想再购买一袋则需要重新排队(是否再购买可以随机设定)。 试应用队列编写代码输出最后超市卖出的大米袋数。
时间: 2023-03-27 16:03:14 浏览: 106
好的,这是一个关于队列的问题。根据题目描述,我们可以使用队列来模拟这个过程。具体实现如下:
```
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX_SIZE 100
typedef struct {
int data[MAX_SIZE];
int front, rear;
} Queue;
void initQueue(Queue *q) {
q->front = q->rear = ;
}
int isEmpty(Queue *q) {
return q->front == q->rear;
}
int isFull(Queue *q) {
return (q->rear + 1) % MAX_SIZE == q->front;
}
void enqueue(Queue *q, int x) {
if (isFull(q)) {
printf("Queue is full.\n");
exit(1);
}
q->data[q->rear] = x;
q->rear = (q->rear + 1) % MAX_SIZE;
}
int dequeue(Queue *q) {
if (isEmpty(q)) {
printf("Queue is empty.\n");
exit(1);
}
int x = q->data[q->front];
q->front = (q->front + 1) % MAX_SIZE;
return x;
}
int main() {
Queue q;
initQueue(&q);
int sold = ;
srand(time(NULL));
for (int i = 1; i <= 50; i++) {
enqueue(&q, i);
}
while (!isEmpty(&q)) {
int x = dequeue(&q);
sold++;
printf("第%d个人买了一袋大米,已售出%d袋大米。\n", x, sold);
if (rand() % 2 == ) {
enqueue(&q, x);
}
}
printf("超市总共卖出%d袋大米。\n", sold);
return ;
}
```
这个程序使用了一个循环队列来模拟排队购买大米的过程。首先将50个人的编号依次入队,然后不断出队,表示每个人购买一袋大米。如果这个人还想再购买一袋大米,就将他的编号再次入队,表示他需要重新排队。为了模拟这个过程,我们使用了一个随机数来决定这个人是否需要重新排队。最后统计已售出的大米袋数,输出结果。
希望这个程序能够帮到你!