Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 1640|回复: 2

[VBA] 用VBA或数学多少个单位正方形

[复制链接]
发表于 2017-2-12 09:48 | 显示全部楼层 |阅读模式

用VBA或数学多少个单位正方形


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
发表于 2017-2-12 14:41 | 显示全部楼层
本帖最后由 香川群子 于 2017-2-12 15:19 编辑

有多种排列组合方式、最大值m=234

解题思路:
假设总根数s=500、
那么长方形a/b 所需根数n=a+b+2ab
当还有剩余时,每增加1列需要加1根做底,然后再每2根构成1个单正方形。

那么也就是说,最终用完500根有3种情况:
1. 正好用完、即s-a*b=0 、则构成小正方形总数m=a*b
2. s-a*b剩余为奇数、则需增加1列、计算小正方形个数m=a*b+(500-n-3)/2+1
3. s-a*b剩余为偶数、则需增加2列、计算小正方形个数m=a*b+(500-n-6)/2+2

遍历计算并记录最大值即可。


代码如下:
  1. Sub test()
  2.     s = 500
  3.     For a = 2 To Sqr(s)
  4.         b = Int((s - a) / (1 + 2 * a))
  5.         If a > b Then Exit For
  6.         n = (a + b + 2 * a * b)
  7.         If n = s Then
  8.             m = a * b
  9.         Else
  10.             If n Mod 2 Then
  11.                 x = (s - n - 3) / 2
  12.                 m = a * b + x + 1
  13.             Else
  14.                 x = (s - n - 6) / 2
  15.                 m = a * b + x + 2
  16.             End If
  17.         End If
  18.         If m >= r Then r = m: Debug.Print a; b; x; m
  19.     Next
  20.     MsgBox m
复制代码


代码运行结果:
2  99  0  199
3  71  0  213
4  55 -1  220
5  45 -1  225
6  38 -1  228
7  32  5  230
8  28  5  231
9  25  5  232
10  23  2  233
11  21  0  233
12  19  5  234
13  18 -1  234
14  16  8  234
15  15  7  234


可见最后有4种组合方式可以得到单正方形个数m最大=234的结果。

如图所示,其中黄色格子表明可以向右移动。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

评分

参与人数 1 +6 收起 理由
laoau138 + 6 来学习

查看全部评分

回复

使用道具 举报

发表于 2017-2-12 15:23 | 显示全部楼层
另一种解法:

一般考虑正方形面积乘积最大,所以n=2a+2a^2=500
数学解方程得到 a整数解=15

所以 n=480 余下20根为偶数,则(20-6)/2=7
所以最大值m=15*15+7+2=234

以上。

评分

参与人数 1 +6 收起 理由
laoau138 + 6 来学习

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-24 12:50 , Processed in 0.225646 second(s), 9 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表