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

相关内容

热门资讯

重大发现闽乐乐五十K.开挂器√... 有 亲,根据资深记者爆料闽乐乐五十K是可以开挂的,确实有挂(咨询软件无需...
玩家攻略夏天yy.到底有挂吗√... 有 亲,根据资深记者爆料夏天yy是可以开挂的,确实有挂(咨询软件无需打开...
独家发现{十胡卡到底是不是挂}... 有 亲,根据资深记者爆料十胡卡是可以开挂的,确实有挂(咨询软件无需打开直...
全新升级{西兵互娱炸金花可以开... 有 亲,根据资深记者爆料西兵互娱炸金花是可以开挂的,确实有挂(咨询软件无...
重大发现艾乐棋牌.怎么装挂√原... 有 亲,根据资深记者爆料艾乐棋牌是可以开挂的,确实有挂(咨询软件无需打开...
重大消息{新荣耀牛牛有没有挂}... 有 亲,根据资深记者爆料新荣耀牛牛是可以开挂的,确实有挂(咨询软件无需打...
最新一款全民牛牛.是不是有挂√... 有 亲,根据资深记者爆料全民牛牛是可以开挂的,确实有挂(咨询软件无需打开...
玩家分享攻略{新玉海楼茶苑能不... 有 亲,根据资深记者爆料新玉海楼茶苑是可以开挂的,确实有挂(咨询软件无需...
实测讲解白金岛二七王.开挂辅助... 有 亲,根据资深记者爆料白金岛二七王是可以开挂的,确实有挂(咨询软件无需...
我来分享{蜀友汇怎么装挂}√详... 有 亲,根据资深记者爆料蜀友汇是可以开挂的,确实有挂(咨询软件无需打开直...