程序应该允许用户输入 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;
}
目前的意思是重复第二个数字。我离这里有多远?
答案 0 :(得分:1)
你不需要 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;
答案 1 :(得分:-1)
我编辑了我的答案并取消删除它以解释为什么它很糟糕以及为什么selbie的答案是正确的。
正如 selbie 指出的那样,[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.5
替换了它们。
简化的结果序列是
( ( (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 ) ( ( 2km + 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
这正是 value1
和 value2
的平均值