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

【题解】给定和为定数

【题目描述】

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

【输入描述】

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


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

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

分享给朋友:

相关文章

【题解】会场安排

【题目描述】学校的小礼堂每天都会有许多活动,有时间这些活动的计划时间会发生冲突,需要选择出一些活动进行举办。小刘的工作就是安排学校小礼堂的活动,每个时间最多安排一个活动。现在小刘有一些活动计划的时间表...

【题解】BFS—迷宫问题(1)

【题解】BFS—迷宫问题(1)

【题目描述】一个5*5的矩阵,矩阵内用0,1显示。其中,0是路,表示这个点可以走,1是墙表示这个点不可以走。问,从给定的矩阵中从左上角到右下角最少需要走多少步?注:题目保证有解(不存在左上角和右下角为...

【题解】放苹果(2)

【题目描述】把M个同样的苹果放在N个同样的盘子里,不允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法。【输入】第一行是测试数据的数目t(0≤t≤20)。以...

字符串反连接

【题目描述】写一函数,使输入的一个字符串按反序存放,在主函数中输入并输出反序后的字符串(不包含空格)。【输入描述】一行字符【输出描述】逆序后的字符串【样例输入】123456abcdef【样例输出】fe...

【题解】电缆线(2019青岛市程序设计竞赛)

【问题描述】在郊区有N座通信基站,P条双向电缆,第 i 条电缆连接基站 A_i 和 B_i。特别地,1号基站是通信公司的总站,N号基站位于一座农场中。现在,农场主希望对通信线路进行升级,其中升级第 i...

【题解】直方图

直方图(histogram.cpp)【题目描述】给定一个非负整数数组,统计里面每一个数的出现次数。我们只统计到数组里面最大的数。假设Fmax(Fmax<10000)是数组里最大的数,那么我们只统...