数值统计
统计给定的n个数中,负数、零和正数的个数。
Input
输入数据有多组,每组占一行,每行的第一个数是整数n(n<100),表示需要统计的数值的个数,然后是n个实数;如果n=0,则表示输入结束,该行不做处理。
Output
对于每组输入数据,输出一行a,b和c,分别表示给定的数据中负数、零和正数的个数。
Sample Input
6 0 1 2 3 -1 0
5 1 2 3 4 0.5
0
Sample Output
1 2 3
0 0 5
代码写法1:直接定义3个int来分别储存负数、零、正数的个数
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<cstring>
#include<math.h>
#include<algorithm>
using namespace std;
int main()
{
int n,a,b,c;
double x; //注意x为double/float型,因为题目的输入可以是小数
while(scanf("%d",&n)!=EOF)
{
if(n==0)
{
break;
}
a=b=c=0;
while(n--)
{
scanf("%lf",&x);
if(x<0)
{
a++;
}
else if(x==0)
{
b++;
}
else if(x>0)
{
c++;
}
}
printf("%d %d %d\n",a,b,c);
}
return 0;
代码写法2:定义一个三维数组来储存;与代码写法1不同的地方是:1是每输入一组数据就输出一次,2是等所有组输入完之后,再一起输出。
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<cstring>
#include<math.h>
#include<algorithm>
using namespace std;
int main()
{
int n,a[100][3];
float x;
int i=0;
scanf("%d",&n);
while(n!=0)
{
a[i][0]=a[i][1]=a[i][2]=0; //初始化数组
for(int j=0;j<n;j++)
{
scanf("%f",&x);
if(x<0)
a[i][0]++;
else if(x==0)
a[i][1]++;
else
a[i][2]++;
}
scanf("%d",&n);
i++;
//若输入的有多组数据,则i++可以在下次while(n!=0)里面,用数组的下一行元素储存另外的三个数;即先把所有输入之后的结果储存起来,最后再一起输出
}
for(int j=0;j<i;j++) //一口气输出所有组的结果
printf("%d %d %d\n",a[j][0],a[j][1],a[j][2]);
}