news 2026/7/3 6:48:44

GESP2026年6月认证C++五级( 第三部分编程题(2、晚宴))精讲

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
GESP2026年6月认证C++五级( 第三部分编程题(2、晚宴))精讲



第三部分 第二题——《晚宴》

第一幕:美食晚宴开始了

1、有一天,小明参加了一场五星级晚宴。

桌子上摆着很多菜。

每道菜都有一个"美味度"。


(1)例如:

3 5 7 35 105

(2)主持人宣布了一个规则:

小明只能选两道菜,而且必须是两道菜。

而且还有一个特殊要求:

这两道菜必须互质!


(3)小明的目标是:

按照规则选,让两道菜的美味度之和最大。


第二幕:什么叫互质?

1、有的学生一看到:

互质

脑子一片空白。

其实非常简单。


2、老师拿出几个数字。


第一组

3 5

最大公约数:

gcd(3,5) = 1

所以:

互质

可以一起吃。


第二组

6 9

最大公约数:

3

不是:

1

所以:

不能一起选。

第三组

8 15

最大公约数:

1

是可以的。


3、互质 : gcd==1

以后看到:

互质

脑子立刻翻译成:

gcd(a,b)==1

这是学习数论最重要的结论之一。


第三幕:先不要写程序

1、先看样例。

3 5 7 35 105

2、我们先人工找一下。


(1)第一对:

3 5

互质。

和是:

8

(2)第二对:

3 7

互质。

和是:

10

(3)第三对:

35 7

最大公约数:

7

失败。


(4)第四对:

35 105

最大公约数:

35

失败。


(5)第五对:

5 35

最大公约数:

5

失败。


(6)继续……

最后发现:

3 35

互质。

和:

38

这是最大的。


(7)所以答案:

38

和样例一致。


第四幕:本题能用暴力枚举吗?

可以!


1、如果有5道菜。

3 5 7 35 105

2、每两道菜,都试一次。

3 5 3 7 3 35 3 105 5 7 5 35 ……

所有组合。

都检查。


3、暴力枚举的时间复杂度:

O(N^2)

本题中 2 <= n <= 1000,

完全没问题。


第五幕:使用两层循环:

1、外层循环:

第一个数

2、内层循环:

第二个数

3、代码:

for(i) for(j)

就是:

所有组合。


第六幕:如何更新答案?

1、我们先定义一个:

ans

开始:

0

2、现在:

第一组。

3 5

合法。

和:

8

3、于是:

ans = 8

4、下一组:

3 7

合法。

10

比:

8

大。

更新。

ans = 10

5、于是:

程序就是:

if(gcd(...)==1) ans=max(ans,a+b);

答案就按照我们的要求更新了。


第七幕:重点要写gcd 函数

1、因为:

互质

判断的是:

最大公约数。


2、所以要写:

gcd

函数来求最大公约数。


3、使用欧几里得算法:

int gcd(int a,int b) { if(b==0) return a; return gcd(b,a%b); }

第八幕:完整代码

#include <iostream> #include <algorithm> using namespace std; int gcd(int a,int b) { if(b==0) return a; return gcd(b,a%b); } int main() { int n; cin>>n; int a[1010]; for(int i=0;i<n;i++) cin>>a[i]; int ans=0; for(int i=0;i<n;i++) { for(int j=i+1;j<n;j++) { if(gcd(a[i],a[j])==1) { ans=max(ans,a[i]+a[j]); } } } cout<<ans<<endl; return 0; }

利用两层循环枚举所有两两组合,判断是否互质,如果互质就更新最大答案。


第九幕:程序复杂度分析

1、题目中:

n <= 1000

2、两层循环:

1000×1000 ≈100万

3、每次:

gcd

复杂度:

O(logV)

4、总复杂度:

O(n² logV)

对于本题的数据范围是完全可以通过的。


本题要掌握的知识(★★★★★)

这道题考点,首先就是要掌握gcd()函数,还要有正确的思维流程:

① 枚举所有可能方案 ↓ ② 判断是否合法 ↓ ③ 如果合法 ↓ ④ 更新最优答案

朴素算法模板

遇到类似"从很多方案中找到最优方案"的问题,可以想到下面这个模板:

ans = 初始值; for(枚举所有方案) { if(方案合法) { ans = max(ans, 当前方案); } }

这道《晚宴》就是这个基础模板的应用。


版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/3 6:46:59

测试Obsidian Jupyter插件

测试Obsidian Jupyter插件 【免费下载链接】obsidian-jupyter 项目地址: https://gitcode.com/gh_mirrors/ob/obsidian-jupyter import numpy as np print("Hello, Obsidian Jupyter!") print(f"NumPy版本: {np.__version__}")如果能看到代码块右上…

作者头像 李华
网站建设 2026/7/3 6:40:44

初学者必看:四步判断是否该用 Multi-Agent 架构,附带收藏!

本文深入浅出地介绍了如何判断是否需要使用 Multi-Agent 架构。作者提出四条标尺&#xff0c;帮助读者逐条自检&#xff0c;确定是否应该采用 Multi-Agent 设计。这四条标尺分别是&#xff1a;角色冲突、能力分级、上下文治理和博弈对抗。只有当业务出现组织级复杂度时&#xf…

作者头像 李华
网站建设 2026/7/3 6:40:05

UE5 Verse 编程语言完整体系指南

面向 Unreal Engine 用户的实战版&#xff1a;从 Blueprint / C 视角理解 Verse读者UE 开发者、技术策划、UEFN 创作者、Blueprint / C 用户主线先理解 Verse 在 UE 生态中的位置&#xff0c;再学语法、并发、事务与 UEFN 工作流目标把 Verse 当成可落地的玩法与规则脚本&#…

作者头像 李华
网站建设 2026/7/3 6:39:03

JVM 线程池调优:别只把 corePoolSize 调大

JVM 线程池调优&#xff1a;别只把 corePoolSize 调大 一、线程池问题经常被误判成机器不够 线上接口变慢时&#xff0c;很多团队第一反应是加机器或调大线程池。但线程池不是越大越好。线程数过多会增加上下文切换、内存占用和下游压力&#xff1b;队列过长会隐藏延迟&#xf…

作者头像 李华
网站建设 2026/7/3 6:38:00

收藏 | Java程序员转战大模型,8个月薪资涨50%,小白也能轻松入门!

本文分享了作者从Java开发转型大模型应用开发的经历&#xff0c;强调了自学与报班的利弊&#xff0c;并给出了6个月的学习路线规划&#xff0c;包括Python基础、大模型概念、实战项目等。文章还提供了面试准备建议&#xff0c;鼓励大家抓住AI风口&#xff0c;实现职业跃迁。适合…

作者头像 李华