• XidianOJ 1030 三数和


    题目描述

    北雷老中医给出大面包一个长度为N的无序数组,数组中的元素为整数。如果大面包从中找出一个和 = 0的3个数的组合颜值就能+1。如果没有这样的组合,输出Ren Chou Jiu Gai Duo Du Shu!。

    由于大面包希望他的颜值最高,他需要求出所有和=0的3个数的组合,并把它们按照3个数中最小的数从小到大排序,如果最小的数相等则按照第二小的数排序。大面包想变得和主席亮一样帅,请大家帮忙。

    保证输入的数组不包含重复元素。

    输入

    多组数据 

    对于每组数据:

       第1行,1个数N,N为数组的长度(0 <= N <= 1000)
       第2 - N + 1行:A[i](-107 <= A[i] <= 107)

    输出

    如果没有符合条件的组合,输出Ren Chou Jiu Gai Duo Du Shu!。
    如果有多个组合,需要全部输出。顺序按照3个数中最小的数从小到大排列,如果最小的数相等则继续按照第二小的数排序。每行3个数,中间用空格分隔,并且这3个数按照从小到大的顺序排列
    --正文
    排序后枚举前两个数,使用lowerbound二分查找第三个数
    (PS:STL确实省事)
     
    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    
    int a[1005],n;
    
    int main(){
        while (scanf("%d",&n) != EOF){
            int i,j;
            for (i=0;i<n;i++){
                scanf("%d",&a[i]);
            }
            sort(a,a+n);
            int has = 0;
            for (i=0;i<n-2;i++){
                for (j=i+1;j<n-1;j++){
                    int sum = a[i]+a[j];
                    int pos = lower_bound(a+j+1,a+n,-sum) - a;
                    //printf("%d %d %d
    ",sum,pos,a[pos]);
                    if (pos < n && a[pos] == -sum){
                        has = 1;
                        printf("%d %d %d
    ",a[i],a[j],a[pos]);
                    }
                }
            }
            if (!has) printf("Ren Chou Jiu Gai Duo Du Shu!
    ");
        }
        return 0;
    }
  • 相关阅读:
    PHP引用与global操作符
    php关联数组与索引数组及其显示
    vim列模式
    PHP 魔术方法之__set() __get() 方法
    给图片、表格、公式自编号
    如何将本地项目与coding.net/github上的项目绑定
    用 ElementTree 在 Python 中解析 XML
    用 ElementTree 在 Python 中解析 XML
    正则表达式介绍
    一个javascript面试题解析
  • 原文地址:https://www.cnblogs.com/ToTOrz/p/6068718.html
Copyright © 2020-2023  润新知