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语句跳出内层循环,避免重复计算。

相关内容

热门资讯

清华大学拟增设海洋科学与工程一... 12月18日,清华大学学位评定委员会2025年第五次全体会议在主楼接待厅举行。清华大学校长、校学位评...
小学家长回头看:想要娃学习好,... 办公室里的一位娃上小学的妈妈emo了 , 最近她已经被班主任老师接连“投诉”两次了——不是说娃上课走...
2025香港留学中介TOP10... 一、如何选择香港留学中介机构? 在搜索引擎中,许多计划赴港深造的学生和家长会频繁查询“香港留学中介...
8个问答读懂2026年高水平运... 近期,教育部办公厅印发《关于做好2026年普通高等学校部分特殊类型招生工作的通知》,2026年高水平...
当体育成为成长的阳光,这所小学... 走进渝水五小的清晨,金色的阳光正好洒在“以体树人”的展示台上。在这里,你会看到一种不同寻常的教育风景...
河西学院妇女联合会成立 为深入贯彻落实党建带妇建,加强高校妇联组织建设,12月22日,河西学院召开妇女联合会成立大会暨第一次...
考试交响曲 N凤鸣天女中心小学... (来源:南湖晚报) 转自:南湖晚报 考试交响曲 N凤鸣天女中心小学凤凰校区502班 赵可 指导老师 ...
市教育考试院开展主题参观活动 12.23 览双馆明经纬 研招考启新程 12月23日,辽源市教育考试院组织全体教职工走进市博物馆与市...
让每个孩子找到自己的运动坐标,... 来源:滚动播报 (来源:上观新闻) 操场上,一群三年级学生正挥舞着网球拍,将彩色气球击打过网;不远...
五星院校推荐 | 2026年浙... 最懂浙音音乐考研的团队 学员上岸心得 五星推荐 王老师敲重点: 哈喽大家晚上好,我是你们的王老师!这...