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

一、题目描述:

在一段时间内,到达港口的船有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;
}

四、解释:

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

五、一些相关问题:

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/89810.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ELK日志收集系统

一&#xff0c;概述 ELK由三个组件构成 作用&#xff1a;日志收集 日志分析 日志可视化 二&#xff0c;组件 1&#xff0c;elasticsearch 日志分析 开源的日志收集、分析、存储程序 特点 分布式 零配置 自动发现 索引自动分片 …

QML Book 学习基础3(动画)

目录 主要动画元素 例子&#xff1a; 非线性动画 分组动画 Qt 动画是一种在 Qt 框架下创建交互式和引人入胜的图形用户界面的方法&#xff0c;我们可以认为是对某个基础元素的多个设置 主要动画元素 PropertyAnimation-属性值变化时的动画 NumberA…

JavaSE 集合框架及背后的数据结构

目录 1 介绍2 学习的意义2.1 Java 集合框架的优点及作用2.2 笔试及面试题 3 接口 interfaces3.1 基本关系说明3.2 Collection 常用方法说明3.3 Collection 示例3.4 Map 常用方法说明3.5 Map 示例 4 实现 classes5 Java数据结构知识体系5.1 目标5.2 知识点 1 介绍 集合&#xf…

4.9 已建立连接的TCP,收到SYN会发生什么?

1. 客户端的 SYN 报文里的端口号与历史连接不相同 此时服务端会认为是新的连接要建立&#xff0c;于是就会通过三次握手来建立新的连接。 旧连接里处于 Established 状态的服务端最后会怎么样呢&#xff1f; 服务端给客户端发消息了&#xff1a;客户端连接已被关闭&#xff…

Kubernetes入门 十二、网络之Ingress

目录 概述安装 Ingress使用 Ingress准备工作部署Ingress设置默认后端Ingress 中的 nginx 的全局配置限流路径重写基于 Cookie 的会话保持技术配置 SSL 概述 通常情况下&#xff0c;service 和 pod 的 IP 仅可在集群内部访问。 Service 可以也使用 NodePort 暴露集群外访问端口…

LeetCode-160. 相交链表

这是一道真的非常巧妙的题&#xff0c;题解思路如下&#xff1a; 如果让他们尾端队齐&#xff0c;那么从后面遍历就会很快找到第一个相交的点。但是逆序很麻烦。 于是有一个巧妙的思路诞生了&#xff0c;如果让短的先走完自己的再走长的&#xff0c;长的走完走短的&#xff0c;…

java八股文面试[多线程]——有几种创建线程的方式

this逃逸问题&#xff1a;构造器中启动线程。 面试题&#xff1a; 用Thread和Runable创建线程的差别 一、Runnable和Thread的区别 继承性&#xff1a;Thread是一个类&#xff0c;因此如果继承Thread类&#xff0c;子类就不能再继承其他的类了&#xff0c;而实现Runnable接口…

林业气象站——林业种植气象观测

林业气象站是一种用于观测林区气象环境的仪器&#xff0c;能够观测林区天气、土壤等自然环境参数&#xff08;温度、湿度、风速、风向、降雨量、气压、放射线、土壤湿度等&#xff09;&#xff0c;为开展环境观测、天气预报、灾害预警、林区虫害防治起到综合指导作用。 林业气…

Kubernetes(七)修改 pod 网络(flannel 插件)

一、 提示 需要重启服务器 操作之前备份 k8s 中所有资源的 yaml 文件 如下是备份脚本&#xff0c;仅供参考 # 创建备份目录 test -d $3 || mkdir $3 # $1 命名空间 # $2 资源名称&#xff1a; sts deploy configMap svc 等 # $3 资源备份存放的目录名称for app in kubec…

JVM 是怎么设计来保证new对象的线程安全

1、采用 CAS 分配重试的方式来保证更新操作的原子性 2、每个线程在 Java 堆中预先分配一小块内存&#xff0c;也就是本地线程分配缓冲&#xff08;Thread Local AllocationBuffer&#xff0c;TLAB&#xff09;&#xff0c;要分配内存的线程&#xff0c;先在本地缓冲区中分配&a…

java八股文面试[多线程]——什么是线程安全

对线程安全的理解 总结&#xff1a;一个进程内的多个线程同时访问堆内存。 知识来源&#xff1a; 【并发与线程】对线程安全的理解_哔哩哔哩_bilibili

Linux学习之Ubuntu 20使用systemd管理OpenResty服务

sudo cat /etc/issue可以看到操作系统的版本是Ubuntu 20.04.4 LTS&#xff0c;sudo lsb_release -r可以看到版本是20.04&#xff0c;sudo uname -r可以看到内核版本是5.5.19&#xff0c;sudo make -v可以看到版本是GNU Make 4.2.1。 需要先参考我的博客《Linux学习之Ubuntu 2…