GESP-4 真题题解
2026-10-14 20:52:46
发布于:河北
2阅读
0回复
0点赞
废话少说,代码如下:
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
int n,cnt = 0;
cin>>n;
int* arr = new int[n];
for(int i = 0;i<n;i++){
cin>>arr[i];
}
sort(arr,arr+n);
for(int i = 0;i<n;i++){
if(arr[i]>cnt){
cnt++;
continue;
}
}
cout<<cnt;
delete[] arr;
return 0;
}
原理 & 思路:
一、头文件确定
总之,用algorithm的sort(),或手搓排序算法
废话:这道题是贪心算法的题目,一般需要有序数列,而这道题需要我们要做的是看每次迭代的天数是否小于题单的题数,是则天数 。所以我们可以手搓快速排序等排序算法或algorithm头文件的sort内省排序(注:内省第一步一般用快排)
二、主体
首先定义数组,输入数组的元素,对数组排序,排序这一步是在贪心算法中的需要
然后的主体步骤是:
遍历排序后的数组,在迭代中对数组元素进行检测,如果这个题单的题(arr[i])>当前的天数(cnt),天数(cnt)+1,continue可以不加
我们要对最长天数(cnt)输出,此题完成,不简不难,悟了就会
废话:此题要输入数列,数列长度一般由一个输入的值决定。我这里用的是VLA(变量长度数组),而常规定义的VLA为非标准(在GCC,Clang等编译器支持此拓展),不保证在实际赛事中可用,所以我们可以用堆分配定义,堆分配的VLA是被标准C++允许的。
三、我的代码的一些解释(选看)
- 我的循环中使用了continue,这是一个可加可不加的代码,可以不加
- 关于我的代码中的new[] delete[]:
我个人有个坏习惯,就是用VLA,这是不被标准C++允许的,但是我自从学了指针和堆分配后,我学了new[] delete[] 这个语法,于是我用了,堆数组的长度可以是变量。只要你不忘记delete[]
这里空空如也






有帮助,赞一个