ZBLOG

利用分治法求一组数据中最大的两个数和最小的两个数。 编程要求 请在右侧编辑器Begin-End处补充代码,完成本关任务。 测试说明 平台会对你编写的代码进行测试,比对你输出的数值与实际正确数值,只有所有数据全部计算正确才能通过测试: 测试输入: 10 //数据的总个数 1 //此行及以下为具体的每个数据 3 5 7 9 10 8 6 4 2 预期输出: max1=10 max2=9 min1=1 min2=2 #include void mai...

在给定的代码框中,你可以使用分治法来找到一组数据中最大的两个数和最小的两个数。下面是相应的代码实现:

#include <stdio.h>

void findMinMax(int arr[], int left, int right, int* min1, int* min2, int* max1, int* max2) {
    if (right - left <= 1) {
        if (arr[left] < arr[right]) {
            *min1 = arr[left];
            *min2 = arr[right];
            *max1 = arr[right];
            *max2 = arr[left];
        } else {
            *min1 = arr[right];
            *min2 = arr[left];
            *max1 = arr[left];
            *max2 = arr[right];
        }
        return;
    }

    int mid = (left + right) / 2;
    int leftMin1, leftMin2, leftMax1, leftMax2;
    int rightMin1, rightMin2, rightMax1, rightMax2;

    findMinMax(arr, left, mid, &leftMin1, &leftMin2, &leftMax1,&leftMax2);
    findMinMax(arr,mid+ 1,right,&rightMin1,&rightMin2,&rightMax1,&rightMax2);

    // 找出左侧部分和右侧部分中最小的两个数
    if (leftMin1 <= rightMin1) {
        *min1 = leftMin1;
        *min2 = (leftMin2 <= rightMin1) ? leftMin2 : rightMinl;
    } else {
        *minl = rightMlnl;
        *minl= (rightMlnl <= leflMlnl) ? rightMln2 : leftMlnl;
    }

    // 找出左侧部分和右侧部分中最大的两个数
    if (leftMax1 >= rightMax1) {
        *max1 = leftMax1;
        *max2 = (leftMax2 >= rightMax1) ? leftMax2 : righlMaxl;
    } else {
        *maxl = righlMaxl;
        *max2= (righlMaxl >= leflMaxl) ? righIMax2 : leflMac2;
    }
}

int main() {
    int num, i;
    scanf("%d", &num);
    
    int arr[num];
    for(i = 0; i < num; i++)
        scanf("%d", &arr[i]);

    int min1, min2, max1, max2;

    findMinMax(arr, 0, num - 1, &min1, &min2, &max1,&max2);

    printf("max1=%d max2=%d\n", max1, max2);
    printf("min1=%d min2=%d\n", min1, min2);

	return 0;
}

你可以将上述代码复制到给定的代码框中,然后运行测试数据进行验证。输出结果应该与预期输出一致。希望对你有所帮助!


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=12206

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?