[英]Problem with Output in My Median Calculator
bool isEven(int num){
if(num % 2 == 0){
return true;
}
else {
return false;
}
}
int main() {
int footballPlayer[] = {1,2,3,4};
int lengthOfArray = sizeof(footballPlayer) / sizeof(footballPlayer[0]);
int oddMedianFormula = lengthOfArray/2;
int evenMedianFormula = lengthOfArray/2;
if(isEven(lengthOfArray) == false) {
cout << "The median is " << footballPlayer[oddMedianFormula] << endl;
} else {
if(isEven(footballPlayer[evenMedianFormula]) == true && isEven(footballPlayer[evenMedianFormula - 1] == true)) {
cout << "The median is " << (footballPlayer[evenMedianFormula - 1] + footballPlayer[evenMedianFormula]) / 2 << endl;
}
else if(isEven(footballPlayer[evenMedianFormula]) == false && isEven(footballPlayer[evenMedianFormula - 1] == false)) {
cout << "The median is " << (footballPlayer[evenMedianFormula - 1] + footballPlayer[evenMedianFormula]) / 2 << endl;
}
else {
cout << "The median is " << ((footballPlayer[evenMedianFormula - 1] + footballPlayer[evenMedianFormula]) / 2) + 0.5 << endl;
}
}
return 0;
}
output = 2;
为什么我的 output 是 integer,而当我显然已经将 output 加了一半(0.5)时,一个数字是奇数?
当您将 integer 除以另一个 integer 时,您只需得到数学值的下限(作为整数)。 比如说: 1 / 2 = (int) floor(0.5) = 0
。 这里的答案(它们是正确的)建议(显式)将 integer 值转换为浮点数据类型。 但我想补充一点。
您只需在2
之后加上一个点,让编译器知道您正在执行浮点数除法。 在这种情况下,分子将隐式类型转换为double
。 不要混淆 --> 2.
与2.0
相同。 这是您修改后的代码:
#include <iostream>
using namespace std;
bool isEven(int num) {
if (num % 2 == 0) {
return true;
} else {
return false;
}
}
int main() {
int footballPlayer[] = {1, 2, 3, 4};
int lengthOfArray = sizeof(footballPlayer) / sizeof(footballPlayer[0]);
int oddMedianFormula = lengthOfArray / 2;
int evenMedianFormula = lengthOfArray / 2;
if (isEven(lengthOfArray) == false) {
cout << "The median is " << footballPlayer[oddMedianFormula] << endl;
} else {
if (isEven(footballPlayer[evenMedianFormula]) == true &&
isEven(footballPlayer[evenMedianFormula - 1] == true)) {
cout << "The median is "
<< (footballPlayer[evenMedianFormula - 1] +
footballPlayer[evenMedianFormula]) /
2.
<< endl;
} else if (isEven(footballPlayer[evenMedianFormula]) == false &&
isEven(footballPlayer[evenMedianFormula - 1] == false)) {
cout << "The median is "
<< (footballPlayer[evenMedianFormula - 1] +
footballPlayer[evenMedianFormula]) /
2.
<< endl;
} else {
cout << "The median is "
<< ((footballPlayer[evenMedianFormula - 1] +
footballPlayer[evenMedianFormula]) /
2.) +
0.5
<< endl;
}
}
return 0;
}
我不知道为什么,但您的代码显然对我来说过于复杂。 我什至怀疑你的逻辑是否正确。 如果你只是想找到中位数,那么我认为这么多代码就足够了:
#include <iostream>
#include <vector>
double findMedianSorted(const std::vector<int> &v) {
auto n = v.size();
return n % 2 ? v[n / 2] : (v[(n - 1) / 2] + v[n / 2]) / 2.;
}
int main() {
std::vector<int> footballPlayer = {1, 2, 3, 4};
std::cout << "Median is: " << findMedianSorted(footballPlayer);
}
因为您使用整数。 您必须将其转换为 Double 或 Float。
cout << "The median is " << (float)(footballPlayer[evenMedianFormula - 1] + footballPlayer[evenMedianFormula]) / 2 << endl;
这样的事情应该可以解决问题
那是因为你在做 integer 除法。 integer 类型的除法总是返回 integer,即使结果是浮点数。 将您的任何变量转换为 float,它应该可以工作。 integer师的行为是什么?
对您的代码做了一些更改 -
bool isEven(int num)
{
return !(num % 2);
}
int main()
{
int footballPlayer[] = {1, 2, 3, 4};
int lengthOfArray = sizeof(footballPlayer) / sizeof(footballPlayer[0]);
int oddMedianFormula = lengthOfArray / 2;
int evenMedianFormula = lengthOfArray / 2;
if (isEven(lengthOfArray))
{
if (isEven(footballPlayer[evenMedianFormula]) && isEven(footballPlayer[evenMedianFormula - 1]))
{
cout << "The median is " << (float)(footballPlayer[evenMedianFormula - 1] + footballPlayer[evenMedianFormula]) / 2 << endl;
}
else if (!isEven(footballPlayer[evenMedianFormula]) && !isEven(footballPlayer[evenMedianFormula - 1]))
{
cout << "The median is " << (float)(footballPlayer[evenMedianFormula - 1] + footballPlayer[evenMedianFormula]) / 2 << endl;
}
else
{
cout << "The median is " << (float)((footballPlayer[evenMedianFormula - 1] + footballPlayer[evenMedianFormula]) / 2) + 0.5 << endl;
}
}
else
{
cout << "The median is " << footballPlayer[oddMedianFormula] << endl;
}
return 0;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.