查找用户给定范围内所有数字的平均值



程序应该允许用户输入2个整数,并找到用户给出的两个整数之间(包括)所有整数的平均值。

#include <iostream>
using namespace std;
int main()
{
int value1, value2;
int total = 0;
int number = 1;       // the amount of numbers
float mean;
cout << "Please enter two positive integers separated by a space" << endl;
cin >> value1; cin >> value2;
if (value1 > 0 && value2 > 0)
{
for (int total = value1; total <= value2; total++)
{
mean = static_cast<float>(total) / number;
}
cout << "The mean average of the numbers between and including "
<< value1 << " and " << value2
<< " is " << mean << endl;
}
else
{
cout << "Invalid input - integer must be positive" << endl;
}
return 0;
}

目前平均值只是重复第二个数字。我在这里有多远?

你不需要 for 循环。 您可以按以下方式计算均值:

mean = (value1 + value2)/2.0;

做。

否则,程序中

的错误如下所示:第一个number只分配值 1。

其次,您将total重新声明为 for 循环变量以及外部变量。您只需要声明一次。 编译器应该警告你。

第三:

for (int total = value1; total <= value2; total++)
{
mean = static_cast<float>(total) / number;
}

在上面,您不断为每次迭代的mean重新分配一个新值,而不是让它累积。 此外,mean永远不会在 for 循环之前初始化。可能想将其设置为零。

最后,您不会处理用户为 value1 输入的数字大于 value2 的情况。

我想你的意思是:

if (value1 > value2)
{
int tmp = value2;
value2 = value;
value1 = tmp;
}
number = value2-value1+1;
mean = 0.0f;
for (total = value1; total <= value2; total++)
{
mean += static_cast<float>(total) / number;
}

但同样,除非我的数学是错误的,否则上述内容简化为:

mean = (value1+value2)/2.0;

我已经编辑了我的答案并取消删除了它,以解释为什么它很糟糕以及为什么塞尔比的答案是正确的。

正如塞尔比指出的那样,[m, n]中所有整数的平均值为(m + n)/2

为了弄清楚为什么,让我们逐步完成我以前不必要的复杂答案。


(0, n]中所有整数的总和是n*(n + 1)/2.
假设n > m,要知道(m, n]中所有整数的总和只需减去(0, m]中所有整数的总和,即:(n*(n + 1)/2 - m*(m + 1)/2)
要知道[m, n]中所有整数的总和,我们必须使用m1= m - 1

一旦你知道总和,平均值就是sum/(n - m1)


它有效,但它很糟糕,因为正确的答案要容易得多.
好消息是,从我低效的答案中可以得出好的答案。

让我们考虑一下
n = m + k
m1= m - 1

并在等式(n*(n + 1)/2 - m1*(m1+ 1)/2)/(n - m1)中替换它们

我将两个/ 2分解并用* 0.5out 替换它们.
由此产生的简化顺序是

( ( (m + k)*(m + k + 1) - (m - 1)*(m - 1 + 1)
) * 0.5 )/( m + k - m + 1) ( ( m2+ km + km + k2+ m + k - m2 + m ) * 0.5 )/( k + 1 ) ( ( 2公里 + 2m + k2+ k ) * 0.5 )/( k + 1 ) ( ( 2m(k + 1) + k(k + 1) ) * 0.5 )/( k + 1 ) ( (2m + k) * (k + 1) * 0.5 )/( k + 1 ) ( 2m + k ) * 0.5 ( m + k + m )/2 ( m + n )/2

这正是value1value2的平均值

最新更新