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

【题解】给定和为定数

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

【题目描述】

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

【输入描述】

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


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

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

分享给朋友:

相关文章

【循环】日记第几天

【题目描述】小明每天都坚持写日记,突然有一天小明在想,我今年写了多少篇日记了?一篇一篇的数好麻烦,没办法小明只能把这个艰难的问题交给聪明的你来解决。【输入描述】输入三个整数�y,m,d分别表示年月日,...

【题解】苯小猴

【题目描述】笨小猴的词汇量很小,所以每次做英语选择题的时候都很头疼。但是他找到了一种方法,经试验证明,用这种方法去选择选项的时候选对的几率非常大!这种方法的具体描述如下:假设maxn是单词中出现次数最...

【题解—深搜】马走日

【题解—深搜】马走日

【题目描述】马在中国象棋以日字形规则移动。请编写一段程序,给定n×m大小的棋盘,以及马的初始位置(x,y),要求不能重复经过棋盘上的同一个点,计算马可以有多少途径遍历棋盘上的所有点。【输入】第一行为整...

【题解】链表操作

【题目描述】给定一个N个数的数组,M次操作,每次操作为下列操作之一。求最后的数组。操作1:在第X个数之后插入一个数Y。操作2:删除第X个数。操作3:对区间[X,Y]进行排序。操作4:对区间[X,Y]进...

【题解】跳格子

【题目描述】地面上有一排长度为n的格子1-n,每个格子上都有一个数xi,开始时你在位置0,每次你可以向前跳1-2格,然后取走格子上的数,直到跳到位置n+1。取走的数的和就是你的得分,现在你想知道你可能...

【题解】区间合并

【题目描述】给定n个闭区间[ai,bi],其中i=1,2,...n。任意两个相邻或相交或相邻的闭区间可以合并为一个闭区间。例如,[1,2]和[2,3]可以合并为[1,3]。[1,3]和[2,4]可以合...