1 条题解
-
0
#include<bits/stdc++.h> using namespace std; // arr-存储所有抽奖数字,数组大小适配n≤1000的限制 int arr[1010]; int main() { // [1] 读取抽奖人数n int n; cin >> n; // [2] 读取n个互不相同的抽奖数字 for (int i = 0; i < n; i++) { cin >> arr[i]; } // [3] 对数组升序排序,便于后续从大到小检查+双指针找三数之和 sort(arr, arr + n); // [4] 从最大的数字开始检查(确保找到的第一个符合条件的数就是最大的中奖数) for (int i = n - 1; i >= 3; i--) { int target = arr[i]; // 当前检查的数字,作为三数之和的目标值 // 在0~i-1的范围内找三个不同的数,使其和等于target for (int j = 0; j < i - 2; j++) { int k = j + 1; // 左指针 int l = i - 1; // 右指针 while (k < l) { int sum = arr[j] + arr[k] + arr[l]; if (sum == target) { // 找到符合条件的最大数,直接输出并结束程序 cout << target << endl; return 0; } else if (sum < target) { k++; // 和太小,左指针右移增大和 } else { l--; // 和太大,右指针左移减小和 } } } } // [5] 遍历完所有数字都未找到符合条件的数,输出no cout << "no" << endl; return 0; }
- 1
信息
- ID
- 1166
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 3
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者