C++自创题目——第一期

一、题目描述:

在一段时间内,到达港口的船有n艘,其中每艘船的信息包括:到达时间t(表示第t秒),船上乘客数k,以及k名乘客的国籍。输出前3600s内每艘船上国籍种数,并输出国籍种数最少的船只的到达时间。

二、分析:

首先,我们需要一个数据结构来存储每艘船的信息。我们可以使用结构体来表示每艘船,其中包含到达时间和乘客数组。乘客数组可以使用一个整型数组来表示,每个元素表示一名乘客的国籍。

三、代码:

#include <stdio.h>

#define MAX_SHIPS 1000
#define MAX_PASSENGERS 100

typedef 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;
}

四、解释:

  1. 首先,我们定义了一个 Ship 结构体来表示每艘船的信息。该结构体包含了 arrival_time 用于表示到达时间,passengers 数组用于存储乘客国籍,以及 num_passengers 表示乘客数量。
  2. 接下来,我们在 main 函数中读取用户输入的船只数量和每艘船的信息。
  3. 然后,我们使用一个循环来统计每艘船上的国籍种数。遍历每艘船的乘客数组,每次遇到一个新的国籍,就将国籍种数加1。
  4. 接着,我们使用另一个循环来找到国籍种数最少的船只的到达时间。我们从第一艘船开始遍历,如果遇到一个国籍种数更少的船只,就更新最小的国籍种数和对应的到达时间。
  5. 最后,我们使用循环输出每艘船上的国籍种数,并输出国籍种数最少的船只的到达时间。

五、一些相关问题:

  1. 如果船只数量超过了预先定义的上限 MAX_SHIPS,该如何处理?
  2. 如何统计所有船只中的不同国籍种数?
  3. 如果乘客数量超过了预先定义的上限 MAX_PASSENGERS,该如何处理?
  4. 如果用户输入的到达时间不按照升序排列,该如何处理?
  5. 如何判断两艘船只到达时间相同的情况下哪艘船只的国籍种数更少?

猜你喜欢

转载自blog.csdn.net/asuf1364/article/details/132589126