回 帖 发 新 帖 刷新版面

主题:请编:输入k,p。要求当K分成不大于p个数字之和当中,统计出现回文的等式和个数

请编:输入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个回复)

沙发

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

板凳


谢谢你!由于我用QB打不开带sub或者function功能的程序,无法验证程序的正确性,暂时不加分。请指教如何用QB打开带有SUB 或者function的程序。如果成功我会给你加分!

3 楼

楼上的回帖让我深感奇怪,为什么你要打不开带sub或者function功能的程序呢?

4 楼

先输主程序,然后在END语句后面输SUB pdhw,再输SUB过程的内容.

5 楼


再次感谢你!先给你加30分,但是按照你的指示输入:sub pdhw和后面的内容后,F5运行出现“重复定义变量”的错误。请问你用的QB是何版本

6 楼

就是C盘DOS里的QB(我家系统盘是D盘).

7 楼

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 楼

不要嫌我问的问题有点幼稚

9 楼

(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 楼

慧佑问的问题好!奖励30分,学习就要有这种态度。
谢谢Matodied。遵照MATODIED的指示修改。祝福你们成为QB论坛的真正武林高手。

我来回复

您尚未登录,请登录后再回复。点此登录或注册