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. 説明:
- まず、
Ship
各船に関する情報を表す構造体を定義します。この構造体にはarrival_time
到着時刻が含まれており、passengers
配列は乗客の国籍とnum_passengers
乗客数を格納するために使用されます。 - 次に、
main
ユーザーが入力した船舶の数と各船舶の情報を関数に読み込みます。 - 次に、ループを使用して各船の国籍の数を数えます。各船の乗客配列を調べ、新しい国籍に遭遇するたびに国籍の数を 1 つ増やします。
- 次に、別のループを使用して、国籍の数が最も少ない船の到着時間を見つけます。最初の船から航行を開始し、より少ない国籍の船に遭遇した場合は、最小国籍数と対応する到着時間を更新します。
- 最後に、ループを使用して各船に乗船している国籍の数を出力し、国籍数が最も少ない船の到着時刻を出力します。
5. 関連する問題:
- 船舶の数が事前に定義された上限を超えた場合は
MAX_SHIPS
どうなりますか? - すべての船の異なる国籍の数を数えるにはどうすればよいですか?
- 乗客数が事前に定義された上限を超えた場合は
MAX_PASSENGERS
どうなりますか? - ユーザーが入力した到着時間が昇順ではない場合はどうなりますか?
- 2 隻の船が同時に到着した場合、どちらの船の国籍が少ないかをどのように判断するのでしょうか?