说明: 对于由多个非负整数组成的数组,数组标准化表示每个元素都将除以该数组的总和。假定该数组至少包含一个元素,并且元素的总和不会超过
输入: 几个非负整数
输出: 归一化的结果。
样本输入 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;
}
我知道了,这不是一个好问题,0/0应该输出1
答案 0 :(得分:0)
是的,的确,您是对的,这是一个简单的问题。您的输出语句
cout<<setiosflags(ios::fixed)<<setprecision(2)<<" "<<1.0*arr[i]/sum;
使用
格式化输出意思是,您恰好显示了两位小数。每次
(1.0 * arr [i] /总和<0.01
结果将精确显示为0.00
希望这会有所帮助