C++笔记-PTA Swan学院社团招新

it2024-07-04  46

文章目录

一、题目二、算法思想三、代码

一、题目

二、算法思想

存储结构使用的是结构体数组,每一个结构体中存放着每一个宣讲会的开始时间及其结束时间。 根据题目的提示,我们可以使用双重循环,对这些宣讲会根据结束时间进行冒泡升序排列。 需要注意的是位于末尾的第n个宣讲会在i为n-1时就已经被判断过了,所以第n个宣讲会不需要参与排序。

在统计可参加的宣讲会数量时,可以定义两个变量。 一个用于统计数量,一个用于存储上一个宣讲会的结束时间。 默认第一个宣讲会是不需要比较的,所以可以先初始化一下num和last_time。

之后的统计从第2个宣讲会开始到第n个,如果宣讲会的开始时间大于等于上一个宣讲会结束时间时, 就表示小花花可以参加此宣讲会,然后就更新last_time和num

三、代码

#include<iostream> #include<stdlib.h> using namespace std; struct metting { int start_time;//开始时间 int end_time;//结束时间 }met[1002];//结构体数组 int main() { int n;//宣讲会的个数 int i,j; int num;//参加的宣讲会数量 int last_time;//上一个宣讲会结束时间 cin>>n; for(i=1;i<=n;i++) cin>>met[i].start_time>>met[i].end_time; for(i=1;i<=n;i++)//冒泡排序 { for(j=1;j<n;j++) { metting tmp = met[j]; if(met[j].end_time>met[j+1].end_time)//结束时间较晚的排在后面 { met[j] = met[j+1]; met[j+1] = tmp; } } } /* for(i=1;i<=n;i++) { cout<<met[i].start_time<<" "<<met[i].end_time<<endl; } */ num = 1; last_time = met[1].end_time; for(i=2;i<=n;i++)//计算可参加的宣讲会数量 { if(met[i].start_time>=last_time)//时间未发生冲突时 { num++; last_time = met[i].end_time; } } cout<<num<<endl; return 0; }
最新回复(0)