CSP-J/S冲奖第18天:真题解析
开心田螺
2025-03-18 05:41:11
0

解题步骤

  1. 读取输入:首先读取整数 n,然后读取 n个正整数并存储在一个数组或容器中。

  2. 排序数组:对数组进行排序,以便后续使用双指针法高效查找。

  3. 遍历数组:对于每个数 target,检查是否存在另外两个不同的数 a和 b,使得 a + b = target。

  4. 双指针查找:对于每个 target,使用双指针法在已排序的数组中查找是否存在 a和 b满足条件。

  5. 计数结果:统计满足条件的 target的数量。

涉及的知识点
  • 数组操作:包括读取、存储和遍历数组。

  • 排序算法:对数组进行排序,常用的是 std::sort。

  • 双指针技巧:用于在有序数组中高效查找满足特定条件的元素对。

  • 条件判断与计数:通过条件判断来统计满足要求的元素数量。

正确代码参考 # include

usingnamespacestd;

intmain{

intn;

cin>> n;

vector< int> nums(n);

for( inti = 0; i < n; ++i) {

cin>> nums[i];

}

// 对数组进行排序

sort(nums.begin, nums.end);

intcount = 0;

for( inti = 0; i < n; ++i) {

inttarget = nums[i];

intleft = 0, right = n - 1;

while(left < right) {

if(left == i) {

left++;

continue;

}

if(right == i) {

right--;

continue;

}

intsum = nums[left] + nums[right];

if(sum == target) {

count++;

break;

} elseif(sum < target) {

left++;

} else{

right--;

}

}

}

cout<< count << endl;

return0;

}

代码解析

  1. 读取输入:使用 cin读取整数 n和 n个正整数,并存储在 vector中。

  2. 排序数组:使用 std::sort对数组进行升序排序。

  3. 遍历数组:使用 for循环遍历每个数 target。

  4. 双指针查找:使用两个指针 left和 right,分别从数组两端向中间移动,查找是否存在 a和 b满足 a + b = target。

  5. 条件判断与计数:如果找到满足条件的 a和 b,则计数器 count加1,并跳出当前循环。

注意事项
  • 在双指针查找过程中,需要跳过与 target相同的索引位置,以确保 a和 b是不同的数。

  • 使用 break语句跳出内层循环,避免重复计算。

相关内容

热门资讯

法考知识点:物权编高频考点(二... 法考知识点:物权编高频考点(二)——所有权与用益物权(附真题详解) 物权编的核心考点——所有权(共有...
法考经验分享 | 稻香里的法考... 初心如磐:检徽之下,再启新程 我是丹东铁路运输检察院的一名检察干警,入检生涯即将迈入第五个年头。 身...
速看!210所高校拟新增硕博点... 对于27考研党而言,近期最值得关注的重磅消息莫过于2026年度学位授权审核动态调整名单的陆续公示。全...
2027宁波大学设计专硕769... A 真题试卷答案部分: 2025年宁波大学769艺术设计评论考研真题试卷与参考答案 2024年宁波大...
正在公示!郑州14名校长入选 经个人申报、市县遴选推荐、专家评审 拟确定马大志等122名中小学校(园)长 作为河南省“十五五”中小...
青岛盟诺学校:西北、港大+伯克... 2026申请季已渐近尾声。当四封来自加州大学伯克利分校的录取通知轰轰烈烈地抵达盟诺校园,点燃了整个申...
留学生求职网站性价比高:客观评... 据公开行业数据显示,超过 50% 的留学生选择回国发展,70% 的毕业生面临即时就业压力,热门岗位的...
2026新人教版高中化学必修(... 2026年学生将迎来新版教材,新教材将更加重视思维和阅读!为了方便广大学生在暑假预习新学期的课本知识...
小学二升三每天一道练习题——第... 步骤一:先算出乐乐一共有多少钱 1大杯6元,买3大杯: 6x3=18(元) 还剩4元,所以总钱数: ...
深圳市福田区荔园小学学子亮相央... 4月,深圳市福田区荔园小学(通新岭)205名学子受邀登上中央广播电视总台《2026 CMG 4・23...