C++ 计算输入数字的最小值、最大值和平均值

C++ 计算输入数字的最小值、最大值和平均值,c++,performance,algorithm,C++,Performance,Algorithm,有没有办法不用数组计算所有数字的平均值/最小值/最大值?每秒需要计算多达10000个数字。当然。保留您收到的最小和最大数字,以及数字的总和和计数。当您需要最小或最大的时,请将其返回。需要平均值时,将总和除以数字 包括上述所有功能的实现,以及许多其他功能。当然。保留您收到的最小和最大数字,以及数字的总和和计数。当您需要最小或最大的时,请将其返回。需要平均值时,将总和除以数字 包括上述所有功能的实现,以及许多其他功能。是 保留一个初始化为高值的最小变量,并在看到低值时更新它 使用最大变量执行相反的操

有没有办法不用数组计算所有数字的平均值/最小值/最大值?每秒需要计算多达10000个数字。

当然。保留您收到的最小和最大数字,以及数字的总和和计数。当您需要最小或最大的时,请将其返回。需要平均值时,将总和除以数字


包括上述所有功能的实现,以及许多其他功能。

当然。保留您收到的最小和最大数字,以及数字的总和和计数。当您需要最小或最大的时,请将其返回。需要平均值时,将总和除以数字

包括上述所有功能的实现,以及许多其他功能。

保留一个初始化为高值的最小变量,并在看到低值时更新它

使用最大变量执行相反的操作

将所有数字相加,然后将总和除以总计数得到平均值

下面的代码不进行边界检查(例如,计数>0,总数不溢出),但应该可以让您了解:

int minimum = // Initialize to large #, in C# would be int.MaxValue
int maximum = // Initialize to most negative #, in C# would be int.MinValue
int count = 0;
int total = 0;

void StatsForNewNumber(int number)
{
    if (number < minimum) minimum = number;
    if (number > maximum) maximum = number;
    count++;
    total += number;
}

int Average()
{
    return total / count;
}
int-minimum=//初始化为大#,在C中#将是int.MaxValue
int max=//初始化为最负的#,在C中#将是int.MinValue
整数计数=0;
int-total=0;
void StatsForNewNumber(整数)
{
如果(数量<最小值)最小值=数量;
如果(数量>最大值)最大值=数量;
计数++;
总数+=数量;
}
整数平均值()
{
返回总数/计数;
}

保留一个初始化为高值的最小变量,并在看到低值时更新它

使用最大变量执行相反的操作

将所有数字相加,然后将总和除以总计数得到平均值

下面的代码不进行边界检查(例如,计数>0,总数不溢出),但应该可以让您了解:

int minimum = // Initialize to large #, in C# would be int.MaxValue
int maximum = // Initialize to most negative #, in C# would be int.MinValue
int count = 0;
int total = 0;

void StatsForNewNumber(int number)
{
    if (number < minimum) minimum = number;
    if (number > maximum) maximum = number;
    count++;
    total += number;
}

int Average()
{
    return total / count;
}
int-minimum=//初始化为大#,在C中#将是int.MaxValue
int max=//初始化为最负的#,在C中#将是int.MinValue
整数计数=0;
int-total=0;
void StatsForNewNumber(整数)
{
如果(数量<最小值)最小值=数量;
如果(数量>最大值)最大值=数量;
计数++;
总数+=数量;
}
整数平均值()
{
返回总数/计数;
}

绝对:一次只能计算一项的所有内容

保持当前最小值和当前最大值,计算运行总数和计数。当你需要平均值时,将跑步总数除以计数,你就会得到答案

class calc {
    double minVal, maxVal, total;
    int count;
public:
    calc()
    :   minVal(numeric_limits<double>::max)
    ,   maxVal(numeric_limits<double>::min)
    ,   total(0)
    ,   count(0) {
    }
    void process(double num) {
        minVal = min(minVal, num);
        maxVal = max(maxVal, num);
        total += num;
        count++;
    }
    double getAvg() {
        // TODO: Check count to be > 0 here
        return total / count;
    }
    double getMin() {
        return minVal;
    }
    double getMax() {
        return maxVal;
    }
}
类计算{
双倍最小值、最大值、总计;
整数计数;
公众:
calc()
:minVal(数值限制::max)
,maxVal(数值限制::min)
,总计(0)
,计数(0){
}
无效进程(双数){
minVal=min(minVal,num);
maxVal=max(maxVal,num);
总数+=num;
计数++;
}
双getAvg(){
//TODO:此处检查计数是否大于0
返回总数/计数;
}
双getMin(){
返回最小值;
}
双getMax(){
返回maxVal;
}
}

绝对:一次只能计算一项的所有内容

保持当前最小值和当前最大值,计算运行总数和计数。当你需要平均值时,将跑步总数除以计数,你就会得到答案

class calc {
    double minVal, maxVal, total;
    int count;
public:
    calc()
    :   minVal(numeric_limits<double>::max)
    ,   maxVal(numeric_limits<double>::min)
    ,   total(0)
    ,   count(0) {
    }
    void process(double num) {
        minVal = min(minVal, num);
        maxVal = max(maxVal, num);
        total += num;
        count++;
    }
    double getAvg() {
        // TODO: Check count to be > 0 here
        return total / count;
    }
    double getMin() {
        return minVal;
    }
    double getMax() {
        return maxVal;
    }
}
类计算{
双倍最小值、最大值、总计;
整数计数;
公众:
calc()
:minVal(数值限制::max)
,maxVal(数值限制::min)
,总计(0)
,计数(0){
}
无效进程(双数){
minVal=min(minVal,num);
maxVal=max(maxVal,num);
总数+=num;
计数++;
}
双getAvg(){
//TODO:此处检查计数是否大于0
返回总数/计数;
}
双getMin(){
返回最小值;
}
双getMax(){
返回maxVal;
}
}

创建四个变量:一个用于存储最小值,一个用于最大值,一个用于总和,一个用于在每次新输入后递增。将每个新输入与minVal和maxVal进行比较,并根据需要进行更新。将输入值加到总和上,增加计数器。平均值始终是总和/计数器,因此,如果需要,您可以动态查询此值,或者在结束时计算它。

创建四个变量:一个用于存储最小值,一个用于最大值,一个用于总和,另一个用于在每次新输入后递增。将每个新输入与minVal和maxVal进行比较,并根据需要进行更新。将输入值加到总和上,增加计数器。平均值始终是总和/计数器,因此,如果需要,您可以动态查询此值,或者在结束时计算它。

您不需要在数组中存储任何数字来查找平均值/min/max,因为您正在迭代这些数字

if(currentSmallest > currentNumber)
     currentSmallest = currentNumber

if(currentLargest < currentNumber)
     currentLargest = currentNumber
if(当前最小值>当前数)
currentMinimest=currentNumber
如果(当前最大值<当前数)
currentMaximum=currentNumber

此外,你将保留一个计数器和总和,通过除以这些数字,你将得到平均值。无需将它们存储在数组中。

您实际上不需要在数组中存储任何数字来查找平均值/min/max,因为您正在迭代这些数字

if(currentSmallest > currentNumber)
     currentSmallest = currentNumber

if(currentLargest < currentNumber)
     currentLargest = currentNumber
if(当前最小值>当前数)
currentMinimest=currentNumber
如果(当前最大值<当前数)
currentMaximum=currentNumber

此外,你将保留一个计数器和总和,通过除以这些数字,你将得到平均值。不需要将它们存储在数组中。

总量溢出如何?@ColinD考虑到OP要求一个解决方案来替换基于数组的解决方案,它看起来不需要考虑总量溢出。总量溢出如何?@ColinD考虑到OP要求一个解决方案来替换基于数组的解决方案,它将