矩形切割(详解)

文章讲述了如何通过减法和循环结构(while和for)解决蓝桥杯中的矩形切割问题,重点在于理解问题本质并转化为长边除以短边的余数操作。作者提供了两种实现方法,包括使用while循环和for循环进行迭代计算。
摘要由CSDN通过智能技术生成

0 前言

本题是蓝桥杯的一个选择题:矩形切割

1 题目

2 题目分析

从题目的情形中分离出问题的本质,实际上就是交替相除取余的问题。相除的本质是减法问题,比如题目中的例子:两边为5和3的材料,就是大边除以小边(即5里面有几个3),切完之后,长边的余数无非两种情况:

  • 等于零(也就是剩余的长度刚好等于短边):此时就结束了,等于短边时剩下的材料自成为一个正方形
  • 小于短边:此时之前的短边编程了长边。继续之前的操作就行了
    于是根据这个思路,我们就可以写出代码。让计算机帮我们计算。

代码如下:

#include <iostream>
using namespace std;
int main(){
    int c = 0, len = 2019, width = 324;
    while(len != width){ 
        int tmp = len % width;//长边对短边的余数
        c += len / width; //长边有几个短边,也就是能切割几个正方形
        if (tmp == 0){ //余数为零
            break;
        }else{ //余数不为零
            len = width;
            width = tmp;
        }
    }
    cout<< c <<endl;
    return 0;
}

其实呢除法本质上就是减法,那怎样用减法实现这个东西呢🤔

#include <iostream>
using namespace std;
int main(){
    int c = 0, len = 2019, width = 324;
    while(len != width){ 
        if(len > width) { 
        	len -= width;
        }else{
        	width -= len;
        }
        c++;
    }
    c++;
    cout<< c <<endl;
    return 0;
}

while 循环的作用就是每次切割的时候判断剩下的材料是否是一个正方形,如果是的话就直接结束了。然后不能忘记把剩下的这个正方形算上,就是代码中的 while 结束后的 “c++”(这个可以使用把 c 初始化为 1 来解决,但是这样个人认为可读性不高)。

while(len != width){
	//do
}

其实这个想法很纯粹,就是按照题目中实际切割矩阵的步骤进行的。

if(len > width) { 
	len -= width;
}else{
	width -= len;
}

切割前要判断,哪个边长,肯定是让短边当作正方形的边长,切割一下就把它减掉。

也可以把 while 循环换成 for 循环。代码如下:

#include <iostream>
using namespace std;
int main(){
    int c = 0, len = 2019, width = 324;
    for(int c = 0; len != width; c++){ 
        if(len > width) { 
        	len -= width;
        }else{
        	width -= len;
        }
    }
    c++;
    cout<< c <<endl;
    return 0;

3 总结

以上就是本文的左右内容了,感谢大家的观看,倘若大佬看到文中的错误之处,敬请批评指正,感谢感谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_a_yang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值