当前位置:首页 > 题解目录 > 正文内容

【题解】给定和为定数

亿万年的星光2个月前 (04-11)题解目录195

【题目描述】

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

【输入描述】

第一行是整数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"。


扫描二维码推送至手机访问。

版权声明:本文由青少年编程知识记录发布,如需转载请注明出处。

分享给朋友:

相关文章

【题解】01串

【题目描述】Fans是个ACM程序设计迷。有时侯,他表现出很强烈的逆反心理,你往东,他往西,你往南,他偏往北。这一次,不知道又是谁惹着他了,好端端的一个个01串,到了他的手里,都变成10串了。请你编个...

【题解】BFS、DFS——走迷宫问题

【题目描述】给定一个 n×m的二维整数数组,用来表示一个迷宫,数组中只包含 0 或 1,其中 0 表示可以走的路,1 表示不可通过的墙壁。最初,有一个人位于左上角 (1,...

【题解】流感传染

【题目描述】有一批易感人群住在网格状的宿舍区内,宿舍区为n\*n的矩阵,每个格点为一个房间,房间里可能住人,也可能空着。在第一天,有些房间里的人得了流感,以后每天,得流感的人会使其邻居传染上流感,(已...

绝对素数

【题目描述】如果一个自然数是素数,且它的数字位置经过对换后仍为素数,则称为绝对素数,例如13。试求出所有二位绝对素数。【输入描述】无【输出描述】所有二位绝对素数(由小到大,一个数一行)。【输入样例】无...

因子分解

【题目描述】输入一个数,输出其素因子分解表达式。【输入描述】输入一个整数 n (2≤n<100)。【输出描述】输出该整数的因子分解表达式。表达式中各个素数从小到大排列。如果该整数可以分解出因子a...

【题解】高精度除法

【题目描述】高精除以高精,求它们的商和余数。【输入描述】输入两个低于300位的正整数。【输出描述】输出商和余数。【样例输入】12313123184575776878979876423245678643...