青少年编程知识记录 codecoming

【题解】给定和为定数

【题目描述】

给出若干个整数,询问其中是否有一对数的和等于给定的数。

【输入描述】

第一行是整数n(0 < n ≤ 100,000),表示有n个整数。

第二行是n个整数。整数的范围是在0到108之间。

第三行是一个整数m(0≤m≤230),表示需要得到的和。

【输出描述】

若存在和为m的数对,输出两个整数,小的在前,大的在后,中间用单个空格隔开。若有多个数对满足条件,选择数对中较小的数更小的。若找不到符合要求的数对,输出一行No。

【样例输入】

4  2 5 1 4  6

【样例输出】

1 5





【参考答案】

#include<iostream>  using namespace std;  int m,n,i,f[5000]={0},temp;  int main()  {      cin>>n;      for(i=0;i<n;i++)      {          cin>>temp;          f[temp]++;      }        	cin>>m;      for(i=0;i<=m/2;i++)      {          if(f[i]>0)          {              f[i]--;              if(f[m-i]>0)              {                                   cout<<i<<" "<<m-i;                  return 0;              }              }                  }      cout<<"No";      return 0;  }



查找数对

    • 如果i存在于数组中(即f[i] > 0),则暂时减少i的计数(避免重复使用同一个数字)。

    • 检查m - i是否存在于数组中(即f[m - i] > 0)。

    • 如果找到,直接输出im - i,并结束程序。

    • 如果没有找到,恢复i的计数(因为后续可能需要使用i)。

    • 遍历可能的较小数i(从0到m/2):

    • 如果遍历完所有可能的i仍未找到解,输出"No"。



作者:亿万年的星光 分类:题解目录 浏览: