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

【题解】给定和为定数

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

【题目描述】

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

【输入描述】

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


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

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

分享给朋友:

相关文章

【题解】愤怒的牛

【题目描述】农夫 John 建造了一座很长的畜栏,它包括N(2<=N<100000)个隔间,这些小隔间依次编号为x1,x2,...xn(0<=xi<=1000000000)。但...

【题解】运动员和训练师的最大匹配数

【题目描述】给你一个下标从 0 开始的整数数组 players ,其中 players[i] 表示第 i 名运动员的&n...

【题解】跳格子

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

【题解】最小子序列

【题目描述】给你一个数组 nums,请你从中抽取一个子序列,满足该子序列的元素之和 严格 大于未包含在该子序列中的各元素之和。如果存在多个解决方案,只需返回 长...

【题解】登山

【题解】登山

【题目描述】五一到了,ACM队组织大家去登山观光,队员们发现山上一共有N个景点,并且决定按照顺序来浏览这些景点,即每次所浏览景点的编号都要大于前一个浏览景点的编号。同时队员们还有另一个登山习惯,就是不...

【题解】选班委

【题目描述】小 T 和他的小伙伴们到 CZ 中学的创新实验班报到后的第一件事就是选班委,班主任 R 老师走上讲台宣布了选举办法,首先让全班 40 位同学依次上讲台做自我介绍,然后按照 职位一个一个依次...