华为机试HJ105:记负均正II
Posted 翟天保Steven
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了华为机试HJ105:记负均正II相关的知识,希望对你有一定的参考价值。
作者:翟天保Steven
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处
题目描述:
从输入任意个整型数,统计其中的负数个数并求所有非负数的平均值,结果保留一位小数,如果没有非负数,则平均值为0
本题有多组输入数据,输入到文件末尾,请使用while(cin>>)读入
数据范围小于1e6
输入描述:
输入任意个整数,每行输入一个。
输出描述:
输出负数个数以及所有非负数的平均值
示例:
输入:
-13 -4 -7
输出:
3 0.0
解题思路:
本题和之前的记负均正I题类似。将输入的数据分成负数和非负数,先输出负数数组的尺寸,再判断非负数数组是否尺寸为0,若为0直接输出0.0,否则它会输出nan,若不为0则用mean计算均值,再用setprecision控制小数点位数,完毕。
测试代码:
#include <iostream>
#include <vector>
#include <algorithm>
#include <iomanip>
using namespace std;
double mean(vector <int>& data) {
double ans = 0.0;
for (int i = 0; i < data.size(); i++) {
ans += data[i];
}
ans = ans / data.size();
return ans;
}
int main()
{
int number;
vector<int> pos;
vector<int> neg;
while(cin>>number)
{
if(number>=0)
pos.push_back(number);
else if(number<0)
neg.push_back(number);
}
double result = mean(pos);
cout<<neg.size()<<endl;
if(pos.size()==0)
{
cout<<"0.0"<<endl;
}
else{
cout<<fixed<<setprecision(1)<<result<<endl;
}
return 0;
}
以上是关于华为机试HJ105:记负均正II的主要内容,如果未能解决你的问题,请参考以下文章