用c语言写一段代码:要求某汽车轮渡口,过江渡船每次能载10辆车过江。过江车辆分为客车类或货车类,上渡船有如下规定: 同类车先到先上船; 客车先于货车上渡船,且每上4辆客车,才允许放上一辆货车; 若等待客车不足4辆,则以货车代替; 若无货车等待,允许客车都上船。 试设计程序模拟渡口管理
时间: 2024-02-13 17:05:47 浏览: 144
谭浩强《c语言程序设计》(第二版)清华大学出版社 八章课后习题答案 上机已通过 代码简单全面
5星 · 资源好评率100%
以下是我为您提供的C语言代码,实现某汽车轮渡口的过江渡船管理:
```c
#include <stdio.h>
#define MAX_SIZE 100
int main()
{
int n, i, j, count = 0, k = 0;
int car[MAX_SIZE], queue[MAX_SIZE];
// n表示车辆数量,count表示已经上船的车辆数目,k表示货车数目
// car数组保存车辆类型,1表示客车,2表示货车
// queue数组保存等待上船的车辆编号
printf("请输入车辆数量:");
scanf("%d", &n);
printf("请输入每辆车的类型(1表示客车,2表示货车):\n");
for (i = 0; i < n; i++)
{
scanf("%d", &car[i]);
}
for (i = 0; i < n; i++)
{
if (car[i] == 1) // 如果是客车
{
if (count % 10 == 0 || count % 10 % 4 != 0 || k == 0) // 如果可以直接上船或满足上船规则
{
printf("客车%d上船\n", i + 1);
count++;
}
else if (count % 10 % 4 == 0 && k > 0) // 如果需要等待货车
{
queue[j++] = i;
}
}
else if (car[i] == 2) // 如果是货车
{
if (k == 0) // 如果没有等待的货车
{
printf("货车%d上船\n", i + 1);
count++;
k++;
}
else if (k > 0 && count % 10 % 4 == 0) // 如果满足上船规则
{
printf("货车%d上船\n", i + 1);
count++;
k++;
}
else // 如果需要等待
{
queue[j++] = i;
}
}
// 检查等待队列
if (j > 0 && count % 10 % 4 == 0) // 如果等待队列中有车辆且满足上船规则
{
int index = queue[0];
if (car[index] == 1) // 如果等待的是客车
{
printf("客车%d上船\n", index + 1);
count++;
for (int m = 0; m < j - 1; m++) // 将等待队列中的车辆前移
{
queue[m] = queue[m + 1];
}
j--;
}
else if (car[index] == 2 && k > 0) // 如果等待的是货车且有货车可以上船
{
printf("货车%d上船\n", index + 1);
count++;
k++;
for (int m = 0; m < j - 1; m++) // 将等待队列中的车辆前移
{
queue[m] = queue[m + 1];
}
j--;
}
}
}
return 0;
}
```
程序中使用了两个数组:`car`保存车辆类型,`queue`保存等待上船的车辆编号。程序按照题目要求模拟了上船的规则,对于每一辆车,如果可以直接上船或满足上船规则,就让它上船;否则就将其加入等待队列。当等待队列中的车辆满足上船规则时,就将其上船。程序输出了每一辆车上船的编号,以及上船的类型。
阅读全文