正负号hackerrank

时间:2018-06-29 19:38:14

标签: c

我是C语言的初学者,并且在hackerrank中遇到问题,遇到一个名为“正负”的问题,该问题未获得预期的输出。

在计算中我对浮动数据类型感到困惑。这是问题所在。我们必须给数字数组包含正,负和零值,并且输入和输出应如下所示。

6
-4 3 -9 0 4 1         

样本输出

0.500000
0.333333
0.166667

数组中有3个正数,2个负数和1个零。 发生的比例为正:3/6 = 0.50000,负:2/6 = 0.33333和零:1/6 = 0.166667 ..

这是我的代码未获得预期的输出。

int main()
{
    int n,i,p,q,r,a[50],pos,res,zer,neg;
    double posres,negres,zerres;

    scanf("%d",&n);
    for(i=0;i<n;i++)
        scanf("%d",&a[i]);

    for(i=0;i<n;i++)
    {
        if(a[i]>0)
            ++p;
        else if(a[i]<0)
            ++q;
        else if(a[i]=0)
            ++r;
    }

    posres=p/n;
    negres=q/n;
    zerres=r/n;
    printf("%lf\n%lf\n%lf\n",posres,negres,zerres);
    return 0;
}

但是我的输出是:

699317.000000
162833139.000000
0.000000    

我哪里出错了?

2 个答案:

答案 0 :(得分:3)

a[i]=0代替0,将a[i]的值分配给a[i]==0,这是一个比较。并在循环之前将pqr初始化为0。否则,您将获得不确定的行为,例如您看到的垃圾。

答案 1 :(得分:0)

int main()
{
    int n = 0;
    int i = 0;
    double zero_count = 0;
    double pos_count = 0;
    double neg_count = 0;
    double num = 0;


    scanf("%d", &n);
    for(i = 0; i < n; i++) {
        scanf("%d", &num);

        if(num > 0) {
            ++pos_count;
        } else if(num < 0) {
            ++neg_count;
        } else if(num == 0) {
            ++zero_count;
        }
    }

    printf("%lf\n%lf\n%lf\n",(pos_count/n), (neg_count/n), (zero_count/n));
    return 0;
}
  1. 即使循环内只有一行代码,也应使用花括号将循环换行。处理大量代码时,您将省去很多麻烦。

  2. 在变量和句法边界之间插入空格。编译器会理解您所写的内容,而人类却很难阅读。