嗨我已经使这个功能找到了中位数,但没有得到3.5我得到3.我不明白为什么?任何人都可以指导我。谢谢。 :)
int median(int array[], int n)
{
float med =0 ;
int a=0;
int b=0;
float newMed=0;
if (n % 2 ==0)
a=n/2;
b=(n/2)-1;
med = (array[a] + array[b]);
newMed = (med/2);
//else
//med = (n+1)/2;
return newMed;
}
int main()
{
int array[6] = {1,2,3,4,6,7};
cout<<"the median is: "<<median(array,6)<<"\n";
}
答案 0 :(得分:1)
更改int median(int array[], int n)
(作为返回int
的函数无法返回3.5
)
float median(int array[], int n) // Return type int -> float
当您的返回类型为int
时,以newMed
计算的返回值3.5
将被无效转换为int
3
。此代码大致相当于:
cout<<"the median is: "<< (int)median(array,6)<<"\n";
如果使用适当的警告标志(-W -Wall -O2
,O2优化标志进行回归分析)编译程序,编译器应该警告您这样的错误。
答案 1 :(得分:1)
你可以使用这样的东西。
#include <iostream>
#include <algorithm>
using namespace std;
#define SIZE 7
float getMedian( int *arry,int size) {
sort(arry, arry + size);
if(size%2){
return arry[(size/2)];
}
else {
return ((arry[(size/2) -1]+arry[size/2])/2);
}
}
int main()
{
int intArray[7] = {1,2,3,4,5,6,7};
//Now we call the sort function
std::cout << getMedian (intArray,SIZE) << std::endl;
return 0;
}