在线评委:数组归一化,我不知道为什么我错了

时间:2019-06-13 09:47:33

标签: c++

说明: 对于由多个非负整数组成的数组,数组标准化表示每个元素都将除以该数组的总和。假定该数组至少包含一个元素,并且元素的总和不会超过

输入: 几个非负整数

输出: 归一化的结果。

样本输入 1 2 3 4

样本输出 0.10 0.20 0.30 0.40

我认为这是一个简单的问题,但是接受率仅为12/1352。这是我的代码。

#include <vector>
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
    int a,t=0,sum=0;
    vector<int> arr;
    while(cin>>a)
    {
        arr.push_back(a);
        t++;
    }
    for(int i=0;i<t;i++)
        sum+=arr[i];
    if(sum)
    {
        cout<<setiosflags(ios::fixed)<<setprecision(2)<<1.0*arr[0]/sum;
        for(int i=1;i<t;i++)
        {
            cout<<setiosflags(ios::fixed)<<setprecision(2)<<" "<<1.0*arr[i]/sum;
        }
    }else
    {
        for(int i=0;i<t;i++)
            if(i==0)
                cout<<"0.00";
            else
                cout<<" 0.00";
    }
    return 0;
}

输出与示例输出相同。但是我得到了错误的答案75%,我不知道我没有考虑哪些技巧。

我知道了,这不是一个好问题,0/0应该输出1

1 个答案:

答案 0 :(得分:0)

是的,的确,您是对的,这是一个简单的问题。您的输出语句

cout<<setiosflags(ios::fixed)<<setprecision(2)<<" "<<1.0*arr[i]/sum;

使用

格式化输出
  • setiosflags(ios :: fixed)
  • setprecision(2)

意思是,您恰好显示了两位小数。每次

  

(1.0 * arr [i] /总和<0.01

结果将精确显示为0.00

希望这会有所帮助