欢迎查看原题

1.简单题目叙述

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

输入格式 共三行: 第一行是整数 ),表示有 n 个整数。

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

第三行是一个整数 ,表示需要得到的和。

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

输出时每行末尾的多余空格,不影响答案正确性

样例输入

4
2 5 1 4
6

样例输出

1 5

初步思路:

爆搜,代码如下:

#include <bits/stdc++.h>
using namespace std;
int main(){
long long n;
cin>>n;
long long int a[666666];
for(int i = 0;i<n;++i) {
cin>>a[i];
}
int m;
cin>>m;
sort(a,a+n);
for(int i = 0;i<n;++i) {
long long tmp = m-i;
for(int j = i;j<n;++j) {
if(a[j]==tmp) {
cout<<i<<" "<<a[j];
return 0;
}
}
}
cout<<"No"<<endl;
}

可惜搜的不对,50分。。。

经排查,原因如下:

i 现在表示的是第一个数,那应该从 0 到  都试,这不太行,可以看的是 a[i] 找 m - a[i] 这样就好了,不过需要考虑当一个数是 m / 2 的时候怎么找另一个数,比较好的方法是把查找区间改成当前数后边。

经改进,代码:

#include <bits/stdc++.h>
using namespace std;
int main(){
long long n;
cin>>n;
long long int a[666666];
for(int i = 0;i<n;++i) {
cin>>a[i];
}
int m;
cin>>m;
sort(a,a+n);
for(int i = 0;i<n;++i) {
long long tmp = m-a[i]; for(int j = i;j<n;++j) {
if(a[j]==tmp) {
cout<<a[i]<<" "<<a[j];
return 0;
}
} }
cout<<"No"<<endl;
}

最新文章

  1. ubuntu下部署SVN
  2. Openfire 编译插件
  3. POJ 1459
  4. 《OD大数据实战》Flume入门实例
  5. ☀【插件】iScroll
  6. lucene4.6 索引创建和搜索例子
  7. js timer
  8. EntityFramework Core不得不注意的性能优化意外收获,你会用错?
  9. [js高手之路]this知多少
  10. echarts堆叠图展示,根据数据维度的粒度判断是否展示数据
  11. linux权限设置(开放某个文件夹给指定用户)
  12. MySQL存储过程中的事务执行失败之后获取错误信息
  13. element-- 修改MessageBox 弹框 中确定和取消按钮顺序
  14. Go+Python双剑合璧
  15. Oracle行列转换case when then方法案例
  16. 050、创建overlay网络(2019-03-15 周五)
  17. OPENAPI规范Swagger
  18. MYSQL数据库中,常见的数据类型有哪些?它们与java中的数据类型如何对应
  19. PAT甲级题解-1047. Student List for Course (25)-排序
  20. Android通过Intent传递对象

热门文章

  1. sql 经典查询50题 思路(一)
  2. 腾讯云上面部署PHP运行环境
  3. ArangoDB 界面介绍
  4. js实现的几种继承方式
  5. IIS中如何设置域名
  6. python基础-集合set及内置方法
  7. 前端技术之:常见前端Web框架
  8. 这次,我是如何监控服务器CPU和内存的
  9. Spring Boot2 系列教程(二十一)整合 MyBatis
  10. 大数据之路week01--day02_2 集合方面的总结