You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何高效找出批量随机生成矩形中的最大面积(以50个为例)

批量生成矩形并找出最大面积的解决方案

你已经实现了生成3个随机矩形并找出最大面积的功能,但面对50个矩形时,完全不需要写大量if语句,用遍历跟踪最大值或者数组存储后遍历的方法就能轻松解决。

核心思路

不需要逐个写条件判断,只需要在生成每个矩形时,维护当前找到的最大面积和对应的矩形编号(或矩形信息),每生成一个就和当前最大值对比更新即可。

修改后的代码实现

我们可以调整genRec函数让它返回生成的矩形,同时在主函数里跟踪最大值:

#include <stdio.h>
#include <time.h>

struct Point {
    int x;
    int y;
};
struct Rectangle {
    struct Point topLeft;
    struct Point botRight;
};

// 计算矩形面积
int Area(struct Rectangle r) {
    int length = r.botRight.x - r.topLeft.x;
    int breadth = r.topLeft.y - r.botRight.y;
    return length * breadth;
}

// 生成一个符合要求的矩形并返回
struct Rectangle genRec() {
    struct Rectangle rec;
    // 生成初始坐标点
    rec.topLeft.x = -50 + rand() % 101;
    rec.topLeft.y = -50 + rand() % 101;
    rec.botRight.x = -50 + rand() % 101;
    rec.botRight.y = -50 + rand() % 101;

    // 确保右下角x坐标大于左上角x坐标
    while (rec.botRight.x <= rec.topLeft.x) {
        rec.botRight.x = -50 + rand() % 101;
    }
    // 确保左上角y坐标大于右下角y坐标
    while (rec.topLeft.y <= rec.botRight.y) {
        rec.topLeft.y = -50 + rand() % 101;
    }
    return rec;
}

int main() {
    srand(time(NULL));
    const int COUNT = 50;
    // 记录最大面积、对应的矩形编号和矩形信息
    int maxArea = -1;
    int maxIndex = -1;
    struct Rectangle maxRect;

    for (int i = 1; i <= COUNT; i++) {
        struct Rectangle current = genRec();
        int currentArea = Area(current);
        // 输出当前矩形信息
        printf("\t----------RECTANGLE %d----------\n", i);
        printf("\tTop left point is x = %d y = %d\n", current.topLeft.x, current.topLeft.y);
        printf("\tBottom right point is x = %d y = %d\n", current.botRight.x, current.botRight.y);
        printf("\tArea is %d\n", currentArea);

        // 对比更新最大值
        if (currentArea > maxArea) {
            maxArea = currentArea;
            maxIndex = i;
            maxRect = current;
        }
    }

    // 输出最终结果
    printf("\n\t===============================\n");
    printf("\tRectangle %d has the biggest area --> %d\n", maxIndex, maxArea);
    printf("\tTop left: x=%d y=%d, Bottom right: x=%d y=%d\n", 
           maxRect.topLeft.x, maxRect.topLeft.y, 
           maxRect.botRight.x, maxRect.botRight.y);
    printf("\t===============================\n");

    return 0;
}

代码说明

  1. 调整genRec函数:让它返回生成的struct Rectangle,而不是在函数内直接输出,这样主函数可以获取每个矩形的信息进行后续处理。
  2. 跟踪最大值:在主函数里初始化maxArea(初始设为-1,因为所有矩形面积都是正数)、maxIndex(记录最大面积矩形的编号)、maxRect(保存最大矩形的坐标信息)。
  3. 循环对比更新:每生成一个矩形,计算面积后和当前maxArea比较,如果更大就更新最大值相关变量。
  4. 最终输出:循环结束后直接输出最大面积的矩形信息,全程不需要大量if语句。

如果需要保存所有矩形(比如后续还要做其他处理),可以用数组存储:

// 在main函数里定义数组
struct Rectangle rects[50];
// 循环生成时存入数组
rects[i-1] = genRec();
// 后续遍历数组找最大值
int maxArea = -1;
int maxIdx = 0;
for (int j=0; j<50; j++){
    int area = Area(rects[j]);
    if(area > maxArea){
        maxArea = area;
        maxIdx = j+1; // 对应第几个矩形
    }
}

内容的提问来源于stack exchange,提问作者dan1chX

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 15:41:48