C++ の自作トピック - 最初の問題

1. トピックの説明:

ある期間に港に到着する船は n 隻あり、各船の情報には、到着時刻 t (t 番目の秒を表す)、乗船者数 k、および乗客 k の国籍が含まれます。過去 3600 番台の各船舶の国籍数を出力し、国籍数が最も少ない船舶の到着時刻を出力します。

2. 分析:

まず、各船に関する情報を保存するデータ構造が必要です。各船を、到着時刻と乗客の配列を含む構造体で表すことができます。乗客配列は整数配列で表すことができ、各要素は乗客の国籍を表します。

3. コード:

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

4. 説明:

  1. まず、 Ship 各船に関する情報を表す構造体を定義します。この構造体には arrival_time 到着時刻が含まれており、passengers 配列は乗客の国籍と num_passengers 乗客数を格納するために使用されます。
  2. 次に、 main ユーザーが入力した船舶の数と各船舶の情報を関数に読み込みます。
  3. 次に、ループを使用して各船の国籍の数を数えます。各船の乗客配列を調べ、新しい国籍に遭遇するたびに国籍の数を 1 つ増やします。
  4. 次に、別のループを使用して、国籍の数が最も少ない船の到着時間を見つけます。最初の船から航行を開始し、より少ない国籍の船に遭遇した場合は、最小国籍数と対応する到着時間を更新します。
  5. 最後に、ループを使用して各船に乗船している国籍の数を出力し、国籍数が最も少ない船の到着時刻を出力します。

5. 関連する問題:

  1. 船舶の数が事前に定義された上限を超えた場合は MAX_SHIPSどうなりますか?
  2. すべての船の異なる国籍の数を数えるにはどうすればよいですか?
  3. 乗客数が事前に定義された上限を超えた場合は MAX_PASSENGERSどうなりますか?
  4. ユーザーが入力した到着時間が昇順ではない場合はどうなりますか?
  5. 2 隻の船が同時に到着した場合、どちらの船の国籍が少ないかをどのように判断するのでしょうか?

おすすめ

転載: blog.csdn.net/asuf1364/article/details/132589126