数字分类

原创 2016年06月01日 23:14:15

Description

Vitaly has an array of n distinct integers. Vitaly wants to divide this array into three non-empty sets so as the following conditions hold:

  1. The product of all numbers in the first set is less than zero ( < 0).
  2. The product of all numbers in the second set is greater than zero ( > 0).
  3. The product of all numbers in the third set is equal to zero.
  4. Each number from the initial array must occur in exactly one set.

Help Vitaly. Divide the given array.

Input

The first line of the input contains integer n(3 ≤ n ≤ 100). The second line contains n space-separated distinct integersa1, a2, ..., an(|ai| ≤ 103) — the array elements.

Output

In the first line print integer n1(n1 > 0) — the number of elements in the first set. Then print n1 numbers — the elements that got to the first set.

In the next line print integer n2(n2 > 0) — the number of elements in the second set. Then print n2 numbers — the elements that got to the second set.

In the next line print integer n3(n3 > 0) — the number of elements in the third set. Then print n3 numbers — the elements that got to the third set.

The printed sets must meet the described conditions. It is guaranteed that the solution exists. If there are several solutions, you are allowed to print any of them.

Sample Input

Input
3
-1 2 0
Output
1 -1
1 2
1 0
Input
4
-1 -2 -3 0
Output
1 -1
2 -3 -2
1 0


解题思路:这道题刚开始并没有看懂题意,以为是要将一组数把正数,负数,零分下类。百度了一下了题解,原来是要求每组数乘积的正数,负数,零,进行分类。但是要判断两种情况;1,如果正数没有,那就要从两个负数中选出最后两个;2,如果负数的个数是偶,那么就要从负数中选出一个添加到第三类中;
代码如下:
#include<stdio.h>
int main()
{
	int n,i; 
	int a[1100],a1[1100],a2[1100],a3[1100];
	while(scanf("%d",&n)!=EOF)
	{
		int j=0,k=0,l=0;
		int num1=0,num2=0,num3=0;
		for(i=1;i<=n;i++)
		scanf("%d",&a[i]);
		for(i=1;i<=n;i++)
		{
			if(a[i]<0)
			{
				num1++; 
				a1[j]=a[i];
				j++;
			}
			if(a[i]>0)
			{
				num2++;
				a2[k]=a[i];
				k++;
			}
			if(a[i]==0)
			{
				num3++;
				a3[l]=a[i];
				l++;
			}
		}
		
		 if(k==0)
    {
    	num1=num1-2;
    	num2=num2+2;
        a2[0] = a1[j-1];
        a2[1] = a1[j-2];
        j =j- 2;
        k = 2;
    }


    if(j%2==0)
    {
            
            num3=num3+1;
            num1=num1-1;
            a3[l] = a1[j-1];
			j=j-1;l=l+1;
    }
		
		printf("%d",num1);
		for(i=0;i<j;i++)
		{
			printf(" %d",a1[i]);
		}
		printf("\n");
		
		printf("%d",num2);
		for(i=0;i<k;i++)
		{
			printf(" %d",a2[i]);
		}
		printf("\n");
		
		printf("%d",num3);
		for(i=0;i<l;i++)
		{
			printf(" %d",a3[i]);
		}
		printf("\n");
		
	}
	return 0;
 } 


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

模拟地与数字地的分类

  • 2013年05月17日 15:54
  • 4KB
  • 下载

基于贝叶斯分类的手写数字识别

  • 2011年08月15日 22:58
  • 3.61MB
  • 下载

【数字图像处理之(二)】图像的分类

在计算机中,按照颜色和灰度的多少可以将图像分为灰度图像、二值图像、索引图像和RGB图像四种基本类型。在计算机中,通常是以数组(或矩阵)的形式储存图像的。 灰度图像: 灰度图像矩...

Tensorflow小样例-分类模型(识别mnist手写数字)

Tensorflow之构建一个简单的神经网络,并用于预测mnist手写数字,

编程逻辑(数字集成电路分类::)

  • 2011年03月18日 16:23
  • 2.49MB
  • 下载

深度学习Java类库deeplearning4j 学习笔记-MNIST手写数字分类问题

deeplearning4j这是一个用Java实现的深度学习类库。 网址: https://deeplearning4j.org 问题和数据集Minist是一个每个学过机器学习的童鞋都熟悉的类库。这...

模式识别-数字分类识别程序

  • 2015年10月17日 10:49
  • 428KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:数字分类
举报原因:
原因补充:

(最多只允许输入30个字)