给出n个正整数和一个正整数m,问n个数字中是否存在一对数字a和b(a <= b),使a+b=m成立。如果有多个,输出a最小的那一对。
基本思路双指针+散列的思路。枚举i从1到m-1,如果其中某一个i和m-i出现过 并且 i和m-i不是同一个元素,说明找到了方案;如果枚举了所有的i都没有找到方案说明”No Solution“。
代码#include#include #include using namespace std; const int N=1005; int hashtable[N];//散列:下标为某个元素,值表示某个元素是否出现过 int main(){ int n,m; scanf("%d%d",&n,&m); //读入元素,初始化散列表 for(int i=0;i >a; hashtable[a]++; } //枚举i从1到m-1(这样也可以保证找到的结果是最小的那一对) //如果i和m-i出现过 并且 i和m-i不是同一个元素,说明找到了方案,输出并返回 //否则进入下一个循环 for(int i=1;i



