华为机试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的主要内容,如果未能解决你的问题,请参考以下文章

华为机试题 HJ105记负均正II

华为机试HJ97:记负均正

华为机试HJ97:记负均正

#yyds干货盘点# 解决华为机试:记负均正II

华为机试题 HJ97记负均正

华为机试题 HJ97记负均正