给出一个长度为N的无序数组,数组中的元素为整数,有正有负包括0,并互不相等。从中找出所有和 = 0的3个数的组合。如果没有这样的组合,输出No Solution。如果有多个,按照3个数中最小的数从小到大排序,如果最小的数相等则按照第二小的数排序。

 
Input
  1. 1行,1个数NN为数组的长度(0 <= N <= 1000)
  2. 2 - N + 1行:A[i](-10^9 <= A[i] <= 10^9)
Output
  1. 如果没有符合条件的组合,输出No Solution
  2. 如果有多个,按照3个数中最小的数从小到大排序,如果最小的数相等则继续按照第二小的数排序。每行3个数,中间用空格分隔,并且这3个数按照从小到大的顺序排列。
Input示例
  1. 7
  2. -3
  3. -2
  4. -1
  5. 0
  6. 1
  7. 2
  8. 3
Output示例
  1. -3 0 3
  2. -3 1 2
  3. -2 -1 3
  4. -2 0 2
  5. -1 0 1
  6.  
  7. 二重循环+二分 O(N^2LogN)
  1. #include <iostream>
  2. #include <stdio.h>
  3. #include <algorithm>
  4. using namespace std;
  5.  
  6. int a[];
  7.  
  8. bool binary_find(int l, int r, int x)
  9. {
  10. while (l <= r) {
  11. int m = (l+r)>>;
  12. if (a[m] > x)
  13. r = m - ;
  14. else if (a[m] < x)
  15. l = m + ;
  16. else
  17. return ;
  18. }
  19. return ;
  20. }
  21.  
  22. int main()
  23. {
  24. //freopen("1.txt", "r", stdin);
  25. int n;
  26. scanf("%d", &n);
  27. for (int i = ; i < n; i++)
  28. scanf("%d", &a[i]);
  29. sort(a, a+n);
  30. int flag = ;
  31. for (int i = ; i < n; i++) {
  32. for (int j = i+; j < n; j++) {
  33. int x = -(a[i]+a[j]);
  34. // printf("%d %d %d\n", a[i], a[j], x);
  35. if (binary_find(j+, n-, x)) {
  36. printf("%d %d %d\n", a[i], a[j], x);
  37. flag = ;
  38. }
  39. }
  40. }
  41. if (!flag) printf("No Solution\n");
  42.  
  43. return ;
  44. }

更快的二分 同时搜索两个数

  1. #include <iostream>
  2. #include <stdio.h>
  3. #include <algorithm>
  4. using namespace std;
  5.  
  6. int a[];
  7.  
  8. int main()
  9. {
  10. //freopen("1.txt", "r", stdin);
  11. int n;
  12. scanf("%d", &n);
  13. for (int i = ; i < n; i++)
  14. scanf("%d", &a[i]);
  15. sort(a, a+n);
  16.  
  17. int flag = ;
  18. for (int i = ; i < n; i++) {
  19. int j, k, x;
  20. j = i+;
  21. k = n-;
  22. while (j < k) {
  23. x = a[i]+a[j]+a[k];
  24. if (x < )
  25. j++;
  26. else if (x > )
  27. k--;
  28. else {
  29. printf("%d %d %d\n", a[i], a[j], a[k]);
  30. flag = ;
  31. j++; k--;
  32. }
  33. }
  34. }
  35. if (!flag) printf("No Solution\n");
  36.  
  37. return ;
  38. }
  1.  

[51nod] 1090 3个数和为0 暴力+二分的更多相关文章

  1. 51Nod 1090 3个数和为0(暴力)

    1090 3个数和为0 基准时间限制:1 秒 空间限制:131072 KB 分值: 5         难度:1级算法题 给出一个长度为N的无序数组,数组中的元素为整数,有正有负包括0,并互不相等.从 ...

  2. 51nod 1090 3个数和为0【二分】

    1090 3个数和为0 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题  收藏  关注 给出一个长度为N的无序数组,数组中的元素为整数,有正有负包括0,并互不相等.从 ...

  3. 51Nod 1090 3个数和为0 set 二分优化

    给出一个长度为N的无序数组,数组中的元素为整数,有正有负包括0,并互不相等.从中找出所有和 = 0的3个数的组合.如果没有这样的组合,输出No Solution.如果有多个,按照3个数中最小的数从小到 ...

  4. [51nod] 1267 4个数和为0 暴力+二分

    给出N个整数,你来判断一下是否能够选出4个数,他们的和为0,可以则输出"Yes",否则输出"No". Input 第1行,1个数N,N为数组的长度(4 < ...

  5. 51Nod 1090 3个数和为0

    题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1090 思路:排序 三个for循环 但是要控制循环 不能从头开 ...

  6. 51nod——T1267 4个数和为0

    https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1267 题目描述 给出N个整数,你来判断一下是否能够选出4个数,他们的和 ...

  7. 1001 数组中和等于K的数对 1090 3个数和为0

    二分查找.对数组每个V[i],在其中查找K-V[i],查找完成后修改v[i]避免重复输出 #include<iostream> #include<algorithm> #inc ...

  8. 51Nod 1267 4个数和为0 二分

    给出N个整数,你来判断一下是否能够选出4个数,他们的和为0,可以则输出"Yes",否则输出"No".Input第1行,1个数N,N为数组的长度(4 <= ...

  9. 51nod 1267 4个数和为0

    基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 给出N个整数,你来判断一下是否能够选出4个数,他们的和为0,可以则输出"Yes",否则输出&qu ...

随机推荐

  1. Spring事务管理API

  2. Linux实战教学笔记52:GlusterFS分布式存储系统

    一,分布式文件系统理论基础 1.1 分布式文件系统出现 计算机通过文件系统管理,存储数据,而现在数据信息爆炸的时代中人们可以获取的数据成指数倍的增长,单纯通过增加硬盘个数来扩展计算机文件系统的存储容量 ...

  3. C#给图片加文字水印

    public class TxtWaterMark { public enum WaterPositionMode { LeftTop,//左上 LeftBottom,//左下 RightTop,// ...

  4. $(window).load()和$(document).ready()

    一.前言 我们在编写前端代码的js文件时,往往是会先写一个$(function(){}),然后才会在大括号里面继续写我们自己的代码.当时并不能理解为什么要添加这样一个东西,只是把它当做一个标签一样添加 ...

  5. Mac shell使用技巧总结(转)

    1.文件操作 常用目录 /Systme/Library/Extensions // 驱动所在目录 /User/XXX/Desktop // 桌面目录 资源库 chflags nohidden ~/Li ...

  6. 对比Nginx配置文件差异

    一.概要: Python2 官方文档:https://docs.python.org/2/library/difflib.html Python2 官方文档:https://docs.python.o ...

  7. SpringBoot与Shiro的整合(单体式项目)

    1.包结构 2.jar包,配置文件,类 2.1pom.xml文件配置 <?xml version="1.0" encoding="UTF-8"?> ...

  8. VisualVM远程连接Tomcat(转)

    转自:http://www.cnblogs.com/sunshine-2015/p/5547128.html VisualVM VisualVm是一个将很多JDK命令工具可视化的windows程序,直 ...

  9. 面向对象的JavaScript-005-Function.prototype.call()的3种作用

    1. // call的3种作用 // 1.Using call to chain constructors for an object function Product(name, price) { ...

  10. [GO]文件的收发服务器

    发送方 package main import ( "fmt" "os" "net" "io" ) //发送文件内容 f ...