azusa~ 2022-08-03 22:20 采纳率: 25%
浏览 116

为什么有序数组的中位数是a[N/2]而不讨论N的奇偶性?

为什么有序数组的中位数是a[N/2]而不讨论N的奇偶性?

#include <stdio.h>

#define MAXN 10
typedef float ElementType;

ElementType Median( ElementType A[], int N );

int main ()
{
    ElementType A[MAXN];
    int N, i;

    scanf("%d", &N);
    for ( i=0; i<N; i++ )
        scanf("%f", &A[i]);
    printf("%.2f\n", Median(A, N));

    return 0;
}


/* 你的代码将被嵌在这里 */

ElementType Median(ElementType a[], int N)
{
    int i, j, dk;
    ElementType tmp;
    for (dk = N / 2; dk > 0; dk /= 2)
        for (i = dk; i < N; i++)
        {
            tmp = a[i];
            for (j = i; j >= dk; j -= dk)
                if (tmp < a[j - dk])
                    a[j] = a[j - dk];
                else break;
            a[j] = tmp;
        }

    return a[N / 2];

}













最后的返回值如果N是偶数那么中位数应该为 (a[N/2]+a[N/2-1])/2 为什么这样写会报错?

img

  • 写回答

6条回答 默认 最新

  • it_hao528 2022-08-03 22:56
    关注

    因为N为正整数int类型 所以N/2也是int类型会舍弃小数点后,如果N是奇数则计算结果刚好是中间数的下标,比如N=3 则N/2 = 1

    评论

报告相同问题?

问题事件

  • 修改了问题 8月4日
  • 修改了问题 8月4日
  • 修改了问题 8月4日
  • 创建了问题 8月3日

悬赏问题

  • ¥15 Qt下使用tcp获取数据的详细操作
  • ¥15 idea右下角设置编码是灰色的
  • ¥15 全志H618ROM新增分区
  • ¥20 jupyter保存图像功能的实现
  • ¥15 在grasshopper里DrawViewportWires更改预览后,禁用电池仍然显示
  • ¥15 NAO机器人的录音程序保存问题
  • ¥15 C#读写EXCEL文件,不同编译
  • ¥15 MapReduce结果输出到HBase,一直连接不上MySQL
  • ¥15 扩散模型sd.webui使用时报错“Nonetype”
  • ¥15 stm32流水灯+呼吸灯+外部中断按键