余姚做百度网站建设,推广app软件,wordpress的文章多重筛选,特效素材免费网站一、题目描述#xff1a;
在一段时间内#xff0c;到达港口的船有n艘#xff0c;其中每艘船的信息包括:到达时间t(表示第t秒)#xff0c;船上乘客数k#xff0c;以及k名乘客的国籍。输出前3600s内每艘船上国籍种数#xff0c;并输出国籍种数最少的船只的到达时间。
二、…一、题目描述
在一段时间内到达港口的船有n艘其中每艘船的信息包括:到达时间t(表示第t秒)船上乘客数k以及k名乘客的国籍。输出前3600s内每艘船上国籍种数并输出国籍种数最少的船只的到达时间。
二、分析
首先我们需要一个数据结构来存储每艘船的信息。我们可以使用结构体来表示每艘船其中包含到达时间和乘客数组。乘客数组可以使用一个整型数组来表示每个元素表示一名乘客的国籍。
三、代码
#include stdio.h#define MAX_SHIPS 1000
#define MAX_PASSENGERS 100typedef struct {int arrival_time;int passengers[MAX_PASSENGERS];int num_passengers;
} Ship;int main() {// 输入n艘船的信息int n;printf(请输入船只数量:);scanf(%d, n);Ship ships[MAX_SHIPS];for (int i 0; i n; i) {printf(请输入第%d艘船的到达时间:, i 1);scanf(%d, ships[i].arrival_time);printf(请输入第%d艘船上乘客数量:, i 1);scanf(%d, ships[i].num_passengers);printf(请输入第%d艘船上乘客的国籍(以空格分隔):, i 1);for (int j 0; j ships[i].num_passengers; j) {scanf(%d, ships[i].passengers[j]);}}// 统计每艘船上的国籍种数int nationality_count[MAX_SHIPS] {0};for (int i 0; i n; i) {for (int j 0; j ships[i].num_passengers; j) {nationality_count[i];}}// 找到国籍种数最少的船只的到达时间int min_nationality_count nationality_count[0];int min_nationality_time ships[0].arrival_time;for (int i 1; i n; i) {if (nationality_count[i] min_nationality_count) {min_nationality_count nationality_count[i];min_nationality_time ships[i].arrival_time;}}// 输出每艘船上的国籍种数for (int i 0; i n; i) {printf(第%d艘船上的国籍种数为%d\n, i 1, nationality_count[i]);}// 输出国籍种数最少的船只的到达时间printf(国籍种数最少的船只的到达时间为%d\n, min_nationality_time);return 0;
}
四、解释
首先我们定义了一个 Ship 结构体来表示每艘船的信息。该结构体包含了 arrival_time 用于表示到达时间passengers 数组用于存储乘客国籍以及 num_passengers 表示乘客数量。接下来我们在 main 函数中读取用户输入的船只数量和每艘船的信息。然后我们使用一个循环来统计每艘船上的国籍种数。遍历每艘船的乘客数组每次遇到一个新的国籍就将国籍种数加1。接着我们使用另一个循环来找到国籍种数最少的船只的到达时间。我们从第一艘船开始遍历如果遇到一个国籍种数更少的船只就更新最小的国籍种数和对应的到达时间。最后我们使用循环输出每艘船上的国籍种数并输出国籍种数最少的船只的到达时间。
五、一些相关问题
如果船只数量超过了预先定义的上限 MAX_SHIPS该如何处理如何统计所有船只中的不同国籍种数如果乘客数量超过了预先定义的上限 MAX_PASSENGERS该如何处理如果用户输入的到达时间不按照升序排列该如何处理如何判断两艘船只到达时间相同的情况下哪艘船只的国籍种数更少