请问一个集合存放n个数 我怎么计算这n个数的中值 如果方便请贴代码,谢谢!!
您这里的取中间值是取排序的序号在中间还是数值的大小在中间?
如果是第一种去取排序序号在中间的比较简单
入托是第二种取数值在中间的也不难
public static void main(String[] args) {
List<Integer> numList = new ArrayList<Integer>();
numList.add(12);
numList.add(19);
numList.add(6);
numList.add(2);
numList.add(22);
//取序号在中间的值
int position = (numList.size()-1)/2;
int num1 = numList.get(position);
//取大小在中间,先排序后取值
for(int i = 0;i<numList.size();i++){
for(int j = i+1;j<numList.size();j++){
if(numList.get(j)>numList.get(i)){
int temp = numList.get(j);
numList.set(j, numList.get(i));
numList.set(i, temp);
}
}
}
int num2 = numList.get(position);
System.out.println(num1);
System.out.println(num2);
}
你说的是什么语言,这样好敲具体代码给你
暴力一点先排序再取中间的数如何?
1 先获取数组长度
2如果这个数能不被2整除,就是奇数,去除2的那个值+1作为key就是中间数。如果能被2整除.....我也不知道你的要求了
你说的中值是指中间的那个数的值,还是说这些数大小最居中的那个值啊。如果前者的话,楼上的就可以。
如果是后者的话,如下:
#include<math.h>
int a[5] = {3,6,7,10,5};
int total = 0;
//计算总和
for(int i=0; i<5; ++i)
{
total += a[i];
}
//找到和总和除以2的值最接近的那个
int DIF = 0;
int idx = 0;
for(int i=0; i<5; ++i)
{
//abs取绝对值
int tmp = abs(a[i] - total/2);
if(tmp < DIF)
{
DIF = tmp;
idx = i;
}
}
cout << "中间值:" << a[idx] <<endl;
楼主给的是乱序,最后的c语言方法要先排序。
依据你的需求。偶数求中间数的平均数。奇数取中间值。代码如下
public static void main(String[] args) {
List<Integer> numList = new ArrayList<Integer>();
numList.add(12);
numList.add(19);
numList.add(6);
numList.add(2);
numList.add(22);
//同样先排序
for(int i = 0;i<numList.size();i++){
for(int j = i+1;j<numList.size();j++){
if(numList.get(j)>numList.get(i)){
int temp = numList.get(j);
numList.set(j, numList.get(i));
numList.set(i, temp);
}
}
}
//奇数求平均数
if(numList.size()%2 != 0){
int position = (numList.size()-1)/2;
int num1 = numList.get(position); //奇数中间值
//.....求平均数同之前的代码
}
//偶数求中间两个数的平均数
else{
int position1 = numList.size()/2;
int position2 = numList.size()/2-1;
int num2 = (numList.get(position1)+numList.get(position2))/2;
}
}
}