蓝桥杯 2019 Java C 矩阵分割 带原理解析

本文详细解析了2019年蓝桥杯竞赛中关于Java和C语言的矩阵分割问题,包括题目的陈述,解题思路的阐述,以及具体实现的代码展示。
摘要由CSDN通过智能技术生成

蓝桥杯 2019 Java C 矩阵分割

题目

小明有一些矩形的材料,他要从这些矩形材料中切割出一些正方形。
当他面对一块矩形材料时,他总是从中间切割一刀,切出一块最大的正方
形,剩下一块矩形,然后再切割剩下的矩形材料,直到全部切为正方形为止。
例如,对于一块两边分别为5 和3 的材料(记为5 X 3),小明会依次切出
3 X 3、2X 2、1 X 1、1 X 1 共4 个正方形。
现在小明有一块矩形的材料,两边长分别是2019 和324。请问小明最终会
切出多少个正方形?

思路

一句话。欧几里得算法,在迭代相除的倍数,就是切割出去的正方形
你应该会和我一样懵逼,什么是欧几里得算法,具体请百度。
说白了就是,一个axb 的矩形不断的切除掉 min{a,b}*min{a,b}个矩形。切到 长或宽中有一个小于min{a,b},
理解不了就画图试验一下。 
在此之后,就不能继续切边长为min{a,b}的矩形了。 剩下的情况可能是a,a%b,或b,b%a的情况,这主要取决于
谁小。
这样子切割下去,直到切割到1或 一条边是另外一条边的倍数的情况,如果成倍数,就直接a/b 便是能切出来的个数。
不成倍数,则切的是最小边。
根据取模运算的规则,我们可以知道 如果a比b小,那么递归进入下一次 实际上是交换了 a,b的位置。 因为a%b=a,b放
在了a,这个时候直接用除法得到是0,所以不会造成干扰

代码


                
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值