输入数据包括两行:
第一行两个整数n(1 ≤ n ≤ 10 ^ 5),sum(1 ≤ sum ≤ 10 ^ 9)
第二行n个整数,范围均在32位整数内,以空格分隔
如果找到和值为某值的两个数,输出两个数字的下标(数组下标从0开始),如果有多解,输出第一个数下标最小的那个解;否则输出false
6 9 2 3 5 6 7 10
0 4
#include<stdio.h> #include<map> using namespace std; map<int,int> book; int a[100005],n,i,target,s,e,flag; int main(){ for(scanf("%d%d",&n,&target),i=0;i<n;i++) scanf("%d",a+i),book[a[i]]=i; for(i=0;i<n;i++) if(book.count(target-a[i])){ flag=1; break; } if(flag) printf("%d %d\n",i,book[target-a[i]]); else printf("false\n"); }
#include<iostream> #include<vector> using namespace std; int getIndex(int n, int sum) { vector<int> nums(n); for (int x = 0; x < n; ++x) { cin >> nums[x]; } int i = 0; int j = nums.size() - 1; bool solve = false; while (i < j) { if (nums[i] + nums[j] == sum) { cout << i << " " << j << endl; solve = true; return 0; } if (nums[i] + nums[j] < sum) { i++; } if (nums[i] + nums[j] > sum) { j--; } } if (!solve) { cout << "false" << endl; } nums.clear(); return 0; } int main() { int n, sum; while (cin >> n >> sum) { getIndex(n, sum); } return 0; }