主题:拼正方形
&佑慧妹妹&
[专家分:660] 发布于 2007-05-12 15:34:00
问题描述:现有若干根长度均为1厘米木棍,用4根可以拼成一个边长1厘米的正方形(称为单位正方形),而用7根和10根木棍则可以分别拼出两个和三个单位正方形,如下图所示:
请你编程算算用这样的方法拼出N个单位正方形需要多少根木棍?
输入:由键盘读入N的值,其中N不超过2004。
输出:将你计算的结果,即拼出N个单位正方形所用的木棍数目输出到屏幕上。
例如:输入N=2,你的程序应输出7。
回复列表 (共10个回复)
沙发
Matodied [专家分:7560] 发布于 2007-05-12 16:54:00
CLS
INPUT n
IF SQR(n) = INT(SQR(n)) THEN s = SQR(n) ELSE s = INT(SQR(n)) + 1
t = (n - s) / s
IF t <> INT(t) THEN t = INT(t) + 1
PRINT 1 + (s + t) * 3 + (n - s - t) * 2
END
加分!!!
板凳
moz [专家分:37620] 发布于 2007-05-12 17:04:00
┌─┬─┬─┐
│ 5│ 4│ 3│
├─┼─┼─│
│ 6│ 1│ 2│
├─┼─┼─┼─┐
│ 7│ 8│ 9│10│
└─┴─┴─┴─┘
代码,你试试对不对 ?:
s%=SQR(N)
PRINT 2*s%*(s%+1)+(N-s%*s%)*2+(N-s%*s%+s%-1)\s%
3 楼
&佑慧妹妹& [专家分:660] 发布于 2007-05-12 17:06:00
OK
4 楼
&佑慧妹妹& [专家分:660] 发布于 2007-05-12 18:13:00
MOZ,你看我这样编对不对:
INPUT N
PRINT N * 3 + 1
5 楼
moz [专家分:37620] 发布于 2007-05-12 20:43:00
当然不对了,当N=4时,做一个四方形,你数数看,是不是省了一根?
6 楼
Matodied [专家分:7560] 发布于 2007-05-12 21:05:00
这道题还有另外一种解法:
(1)先拼一个s*s的正方形,其中s是INT(SQR(n))
(2)将剩下的正方形依次加到大正方形的下面,使组成一个长方形.
(3)如果剩下的正方形数小于s,则直接加到长方形的下面.
程序:
CLS
INPUT n
s = INT(SQR(n))
t1 = 1 + (s * 2 - 1) * 3 + ((s - 1) * (s - 1)) * 2
n = n - s * s
DO UNTIL n < s
t1 = t1 + (s * 2 + 1)
n = n - s
LOOP
IF n > 0 THEN t1 = t1 + 3 + (n - 1) * 2
PRINT t1
END
两种算法哪个好,你自己选吧!
7 楼
&佑慧妹妹& [专家分:660] 发布于 2007-05-13 08:29:00
moz,这道题不是让我们这样拼吗?
— — —
| | | |
— — —
只有这样7根和10根木棍才可以分别拼出两个和三个单位正方形啊。
8 楼
&佑慧妹妹& [专家分:660] 发布于 2007-05-13 08:35:00
依照这样我的程序:输入4,输出4*3+1=13
— — — —
| | | | |
— — — —
您数数,是不是13根。
Matodied的第一个程序输出的是12,我也不知道哪个对,MOZ你说呢?
9 楼
Matodied [专家分:7560] 发布于 2007-05-13 08:59:00
MOZ叫你摆成四方形,就是这样的:
— —
| | | 是不是只要12根了?
— —
| | |
— —
10 楼
Matodied [专家分:7560] 发布于 2007-05-13 09:04:00
[quote]当然不对了,当N=4时,做一个四方形,你数数看,是不是省了一根?[/quote]
MOZ叫你摆成四方形,就是这样的:
— —
| | | 是不是只要12根了?
— —
| | |
— —
我来回复