zoukankan      html  css  js  c++  java
  • 51nod 1090 3个数和为0

    给出一个长度为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<stdio.h>
    #include<string.h>
    #include<algorithm>
    #include<iostream>
    using namespace std;
    int a[10100];
    struct node1
    {
     int x,y,z;
    };
    bool cmp(node1 a,node1 b)
    {
     if(a.x==b.x)
     return a.y<b.y;
     else
     return a.x<b.x;
    }
    int main()
    {
     int n;
     while(scanf("%d",&n)!=EOF)
     {
      node1 qq[10100];
      for(int i=0;i<n;i++)
      {
       scanf("%d",&a[i]);
      }
      sort(a,a+n);
      int key;
      int flag=0;
         for(int i=0;i<n;i++)
         {
          if(a[i]>=0)
          {
              key=i;
              break;
          }
         }
         int cnt=0;
         for(int i=0;i<key;i++)
         {
           for(int j=i+1;j<key;j++)
           {
            for(int k=key+1;k<n;k++)
            if(a[i]+a[j]+a[k]==0)
            {
             qq[cnt].x=a[i];
             qq[cnt].y=a[j];
        qq[cnt].z=a[k];
        cnt++;
        //printf("%d %d %d ",qq[cnt].x,qq[cnt].y,qq[cnt].z);
             flag=1;
            }
           }
         }
         for(int i=0;i<key;i++)
         {
           for(int j=key;j<n;j++)
           {
            for(int k=j+1;k<n;k++)
            if(a[i]+a[j]+a[k]==0)
            {
             qq[cnt].x=a[i];
             qq[cnt].y=a[j];
        qq[cnt].z=a[k];
        cnt++;
              //printf("%d %d %d ",qq[cnt].x,qq[cnt].y,qq[cnt].z);
             flag=1;
            }
           }
         }
         sort(qq,qq+cnt,cmp) ;
         if(flag==0)
         {
          printf("No Solution ");
         }
         else
         {
          for(int i=0;i<cnt;i++)
          {
           printf("%d %d %d ",qq[i].x,qq[i].y,qq[i].z);
          }
         }
       }
       return 0;
    }

  • 相关阅读:
    android RecyclerView smoothScrollToPosition 每次都能滚动到顶部
    android eventbus四种线程模型
    android代码设置主题无效setTheme
    Word备忘录
    Markdown基本语法
    游戏常用术语
    字体格式
    Excel备忘录
    离线方式快速安装python模块以及相关依赖模块
    kube-proxy
  • 原文地址:https://www.cnblogs.com/NaCl/p/9580219.html
Copyright © 2011-2022 走看看