主题:请编:输入k,p。要求当K分成不大于p个数字之和当中,统计出现回文的等式和个数
zgk
[专家分:50] 发布于 2007-05-08 08:41:00
请编:输入k,p。要求当K分成不大于p个数字之和当中,即K=K1+K2+K3+...+KP。统计出现回文的等式和个数。
例如:输入4,4(即把4分成最多4份时,可能出现的类似回文的数字之和)
4=4 (回文)
=3+1
=2+2 (回文)
=1+3
=1+2+1 (回文)
=2+1+1
=1+1+1+1 (回文)
输出
4=4 (回文)
=2+2 (回文)
=1+2+1 (回文)
=1+1+1+1 (回文)
回文数: 4
回复列表 (共13个回复)
沙发
Matodied [专家分:7560] 发布于 2007-05-08 15:08:00
DECLARE SUB pdhw ()
CLS
DIM SHARED t, total
INPUT n
DIM SHARED a(0 TO n)
total = 0: t = 1: s = 0
DO
a(t) = a(t) + 1: s = s + a(t)
IF s >= n THEN
IF s = n THEN pdhw
s = s - a(t): t = t - 1: s = s - a(t)
ELSE
t = t + 1: a(t) = 0
END IF
LOOP UNTIL t = 0
PRINT "Total:", total
END
SUB pdhw
f = 1
FOR i = 1 TO INT(t / 2)
IF a(i) <> a(t + 1 - i) THEN f = 0: EXIT FOR
NEXT i
IF f = 1 THEN
total = total + 1
FOR i = 1 TO t - 1
PRINT a(i); "+";
NEXT i: PRINT a(t)
END IF
END SUB
板凳
zgk [专家分:50] 发布于 2007-05-08 16:06:00
谢谢你!由于我用QB打不开带sub或者function功能的程序,无法验证程序的正确性,暂时不加分。请指教如何用QB打开带有SUB 或者function的程序。如果成功我会给你加分!
3 楼
&佑慧妹妹& [专家分:660] 发布于 2007-05-08 18:58:00
楼上的回帖让我深感奇怪,为什么你要打不开带sub或者function功能的程序呢?
4 楼
Matodied [专家分:7560] 发布于 2007-05-08 19:13:00
先输主程序,然后在END语句后面输SUB pdhw,再输SUB过程的内容.
5 楼
zgk [专家分:50] 发布于 2007-05-09 09:03:00
再次感谢你!先给你加30分,但是按照你的指示输入:sub pdhw和后面的内容后,F5运行出现“重复定义变量”的错误。请问你用的QB是何版本
6 楼
Matodied [专家分:7560] 发布于 2007-05-09 18:50:00
就是C盘DOS里的QB(我家系统盘是D盘).
7 楼
&佑慧妹妹& [专家分:660] 发布于 2007-05-09 19:34:00
DO
[color=FF0000]a(t) = a(t) + 1: s = s + a(t)[/color]
IF s >= n THEN
IF s = n THEN pdhw
[color=FF0000]s = s - a(t): t = t - 1: s = s - a(t)[/color]
ELSE
[color=FF0000]t = t + 1: a(t) = 0[/color]
END IF
LOOP UNTIL t = 0
PRINT "Total:", total
END
FOR i = 1 TO INT(t / 2)
IF [color=FF0000]a(i) <> a(t + 1 - i)[/color] THEN f = 0: EXIT FOR
NEXT i
带红字的程序段你是怎么得出的?
8 楼
&佑慧妹妹& [专家分:660] 发布于 2007-05-09 19:35:00
不要嫌我问的问题有点幼稚
9 楼
Matodied [专家分:7560] 发布于 2007-05-09 20:42:00
(1)a(t) = a(t) + 1: s = s + a(t)
a数组是存放每一个数的,t为指针,先让a(t)加1,s是这些数的和.
(2)s = s - a(t): t = t - 1: s = s - a(t)
如果s的值大于等于n,就要回朔,返回到前一个数,当然和也要减去这个数.
(3)t = t + 1: a(t) = 0
如果和(s)小于n,就搜索下一个数,并将这个数置0.
(4)a(i) <> a(t + 1 - i)
这个语句是判断回文数的.
10 楼
zgk [专家分:50] 发布于 2007-05-10 14:24:00
慧佑问的问题好!奖励30分,学习就要有这种态度。
谢谢Matodied。遵照MATODIED的指示修改。祝福你们成为QB论坛的真正武林高手。
我来回复