GESP C++ 真题 · 逐题精解
首页C++七级真题 › 2026年3月 › 第7题

GESP 2026年3月 C++七级 单选题 第7题

C++七级单选题2026年3月第7题

所属知识点:贪心·分治·枚举 难度要求:— 考频:—

下面程序的运行结果为(a={1,2,8,4,9}, k=3):
bool check(int n,int a[],int k,int dist){
  int cnt=1, last=a[0];
  for(int i=1;i<n;i++)
    if(a[i]-last>=dist){ cnt++; last=a[i]; }
  return cnt>=k;
}
int solve(int n,int a[],int k){
  sort(a,a+n);
  int l=0, r=a[n-1]-a[0];
  while(l<r){
    int mid=(l+r+1)/2;
    if(check(n,a,k,mid)) l=mid; else r=mid-1;
  }
  return l;
}
// a={1,2,8,4,9}, n=5, k=3

正确答案:B

题目解析
二分答案+贪心:排序后 {1,2,4,8,9},求最大的 dist 使得能选出 ≥3 个间隔不小于 dist 的数。dist=3 时可选 1,4,8(共 3 个),dist=4 时只能选 2 个,故最大 dist=3,选 B。

想系统刷完 GESP C++ 1~8 级真题,并查看每道题的逐题精讲?

进入 GESPPASS 开始练习