描述:对于由多个非负整数组成的数组,数组归一化意味着每个元素都将除以数组的总和。假设数组至少由一个元素组成,并且元素的总和不会超过诠释。
输入:几个非负整数
输出:归一化的结果。
示例输入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
是的,的确,你是对的,这是一个简单的问题。你的输出语句
cout<<setiosflags(ios::fixed)<<setprecision(2)<<" "<<1.0*arr[i]/sum;
用
格式化输出
- setiosflags(ios::fixed)
- 设置精度(2)
意思是,您正好显示了 2 位数的分数。每次,当
(1.0*arr[i] / sum) < 0.01
结果将精确显示为 0.00
希望对你有帮助
我是一名优秀的程序员,十分优秀!