PTA-6-5 求自定类型元素的最大值

文章描述了一个如何编写一个函数ElementTypeMax,用于从给定的自定义类型ElementType数组S[]中找到最大值。通过遍历数组并比较元素,最后返回最大值。提供了C语言的裁判测试程序示例。

本题要求实现一个函数,求N个集合元素S[]中的最大值,其中集合元素的类型为自定义的ElementType

函数接口定义:

ElementType Max( ElementType S[], int N );

其中给定集合元素存放在数组S[]中,正整数N是数组元素个数。该函数须返回NS[]元素中的最大值,其值也必须是ElementType类型。

裁判测试程序样例:

#include <stdio.h>

#define MAXN 10
typedef float ElementType;

ElementType Max( ElementType S[], int N );

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

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

    return 0;
}

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

输入样例:

3
12.3 34 -5

输出样例:

34.00

 解题:

ElementType Max( ElementType S[], int N ){
    ElementType max = S[0];
    for(int i = 1; i < N;i++){
        if(max < S[i]){
            max = S[i];
        }
    }
    return max;
}

### 关于 PTA 练习题 6-11 自定类型中位数计算的方法 在处理自定类型的中位数计算时,通常需要考虑以下几个方面: #### 数据结构的选择 对于自定义数据类型中的中位数计算,首先应明确输入的数据形式以及如何存储这些数据。如果数据量较大或者动态变化频繁,则可以采用堆(Heap)来实现高效的中位数维护[^4]。 #### 堆的应用 一种常见的解决方案是利用两个优先队列(Priority Queue),即最大堆和最小堆: - **最大堆**用于保存较小的一半数值; - **最小堆**则负责较大的一半部分。 通过这种方式能够快速获取当前集合的中间值作为中位数。当新元素加入时,需判断其应该放入哪个堆并调整两者的平衡状态以保持总数差异不超过一[^5]。 ```python import heapq class MedianFinder: def __init__(self): self.small = [] # the smaller half of numbers, max heap (invert min-heap) self.large = [] # the larger half of numbers, min heap def addNum(self, num: int) -> None: if not self.large or num >= self.large[0]: heapq.heappush(self.large, num) if len(self.large) > len(self.small)+1: val = heapq.heappop(self.large) heapq.heappush(self.small, -val) else: heapq.heappush(self.small, -num) if len(self.small) > len(self.large): val = -heapq.heappop(self.small) heapq.heappush(self.large, val) def findMedian(self) -> float: if len(self.small) == len(self.large): return (-self.small[0]+self.large[0])/2.0 else: return float(self.large[0]) ``` 上述代码展示了基于Python语言的一个简单实现例子[^6]。 #### 排序法 另一种较为直观但效率较低的方式是对整个数组先进行排序再找出位于中心位置的那个数或平均值得到最终结果。这种方法适用于一次性操作而非持续更新场景下的解过程[^7]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值