C语言/数据结构欧几里得算法题解:长方形切割最大正方形——贪心划分计数

问题描述

小明是城市规划局的一名实习生,最近他接到了一个有趣的任务:将一个长方形园区划分成若干个小正方形区域,每个区域用于不同的功能(如花园、游乐场、停车场等)。园区的长和宽都是整数,小明发现,每次划分时,他需要从园区中切出一个尽可能大的正方形,然后对剩余部分重复此过程,直到整个园区都被划分为正方形。

现在,给定园区的长度 L 和宽度 W(均为正整数),请你帮助小明计算,按照上述贪心策略(每次切出最大可能的正方形),最终会得到多少个正方形区域?

要求:

  1. 模拟贪心策略的过程:每次从当前矩形中切出最大的可能正方形(边长为当前矩形的最小边长),然后对剩余部分递归处理,直到所有部分都变成正方形。
  2. 算法应高效处理较大的输入范围。

测试样例

样例1:

输入:L = 5, W = 3 输出:4 解释:第一步:切出 3x3 的正方形(1个),剩余 2x3 的矩形;第二步:切出 2x2 的正方形(1个),剩余 2x1 的矩形;第三步:切出 1x1 的正方形(1个),剩余 1x1 的矩形;第四步:切出 1x1 的正方形(1个)。总共 4 个正方形。

样例2:

输入:L = 4, W = 6 输出:3 解释:第一步:切出 4x4 的正方形(1个),剩余 4x2 的矩形;第二步:切出 2x2 的正方形(1个),剩余 2x2 的矩形;第三步:切出 2x2 的正方形(1个)。总共 3 个正方形。

样例3:

输入:L = 1, W = 1 输出:1 解释:本身就是一个正方形,不需要划分。

约束条件

  • 1 ≤ L, W ≤ 1000
  • 输入保证 L 和 W 都是正整数
  • 贪心策略:每次从当前矩形中切出最大的可能正方形(边长为当前矩形的最小边长),然后对剩余部分递归处理

程序代码

#include <stdio.h>

int countSquares(int L, int W) {

int count = 0;

while (L > 0 && W > 0) {

if (L == W) {

count += 1;

break;

}

if (L < W) {

// 交换,保证 L >= W

int temp = L;

L = W;

W = temp;

}

// L >= W,切出 W x W 的正方形

count += L / W;

L = L % W;

}

return count;

}

int main() {

printf("%d\n", countSquares(5, 3)); // 4

printf("%d\n", countSquares(4, 6)); // 3

printf("%d\n", countSquares(1, 1)); // 1

return 0;

}

cpp 复制代码
#include <stdio.h>

int countSquares(int L, int W) {
    int count = 0;
    
    while (L > 0 && W > 0) {
        if (L == W) {
            count += 1;
            break;
        }
        
        if (L < W) {
            // 交换,保证 L >= W
            int temp = L;
            L = W;
            W = temp;
        }
        
        // L >= W,切出 W x W 的正方形
        count += L / W;
        L = L % W;
    }
    
    return count;
}

int main() {
    printf("%d\n", countSquares(5, 3));  // 4
    printf("%d\n", countSquares(4, 6));  // 3
    printf("%d\n", countSquares(1, 1));  // 1
    return 0;
}

运行结果

相关推荐
yi0111 小时前
LeetCode 643. 子数组最大平均数 I|从暴力枚举到滑动窗口
人工智能·笔记·python·算法·leetcode·滑动窗口
极光通讯2 小时前
服务器内存来料检验(IQC)实操:批次追溯、外观判定与上机验证
java·服务器·算法
淡海水2 小时前
02-04-原理篇-GC Roots与对象图遍历
算法·unity·c#·图·gc·遍历·roots
ClickHouseDB2 小时前
ClickHouse 大规模 OpenTelemetry 数据接入架构的可靠性演进
算法
Shaoshing2 小时前
BHU 润石工作室 251019自建赛题解
算法
玩AI的奶茶2 小时前
24GB 显存能跑多大的模型?参数量、精度与显存占用对照表
人工智能·python·算法·ai·aigc·gpu算力·算力租赁
java_nnnn3 小时前
LeetCode刷题双指针(有效三角形的个数+三数之和)Java
算法·leetcode·职场和发展
人工智能培训3 小时前
智能博弈背景下中国AI国防建设的战略价值
大数据·人工智能·算法·重构·生活
flinn_small3 小时前
三分算法:原理、实现与实战应用
数据结构·算法·三分