• 1090 3个数和为0


    1090 3个数和为0

    基准时间限制:1 秒 空间限制:131072 KB
    给出一个长度为N的无序数组,数组中的元素为整数,有正有负包括0,并互不相等。从中找出所有和 = 0的3个数的组合。如果没有这样的组合,输出No Solution。如果有多个,按照3个数中最小的数从小到大排序,如果最小的数相等则按照第二小的数排序。
    Input
    第1行,1个数N,N为数组的长度(0 <= N <= 1000)
    第2 - N + 1行:A[i](-10^9 <= A[i] <= 10^9)
    Output
    如果没有符合条件的组合,输出No Solution。
    如果有多个,按照3个数中最小的数从小到大排序,如果最小的数相等则继续按照第二小的数排序。每行3个数,中间用空格分隔,并且这3个数按照从小到大的顺序排列。
    Input示例
    7
    -3
    -2
    -1
    0
    1
    2
    3
    Output示例
    -3 0 3
    -3 1 2
    -2 -1 3
    -2 0 2
    -1 0 1
    //二分下标不好去重; 
    #include <cstdio>
    #include <algorithm>
    using namespace std ;
    int a[1010];
    int main()
    {
        int n;
        while(scanf("%d", &n) != EOF)
        {
            for(int i=0; i<n; i++)
            {
                scanf("%d", &a[i]);
            }
            sort(a, a+n);
            bool flag=0;
            for(int i=0; i< n && a[i]<0; i++)
            {
                int j=i+1, k=n-1;
                while(j< k && j< n)
                {
                    while(a[i]+a[j]+a[k]<0)
                    {
                        j++;
                    }
                    while(a[i]+a[j]+a[k]>0)
                    {
                        k--;
                    }
                    if(j>= k) break;
                    if(a[i]+a[j]+a[k]==0)
                    {
                        flag=1;
                        printf("%d %d %d
    ", a[i], a[j], a[k]);
                        j++; k--;
                    }
                }
            }
            if(!flag)
            {
                printf("No Solution
    ");
            }
        }
        return 0;
    } 
  • 相关阅读:
    【转载】stm32的GPIO八种工作模式
    常用数字滤波算法总结
    ST-LINK使用注意
    【转载】深入理解嵌入式开发
    【stm32中断优先级--珍藏版】
    对飞控的理解(一)
    【转载】c语言数据的左移右移
    四轴之第一炸
    linux下查看隐藏文件
    Jetson TK1 五:移植工控机程序到板上
  • 原文地址:https://www.cnblogs.com/ceal/p/5469013.html
Copyright © 2020-2023  润新知