首页 > 解决方案 > 加减hackerrank

问题描述

我是 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    

我哪里做错了?

标签: c

解决方案


Replace a[i]=0,它为 赋值0a[i]with a[i]==0,这是一个比较。并在循环之前初始化pqrto 。0否则你会得到未定义的行为,例如你看到的垃圾。


推荐阅读