回 帖 发 新 帖 刷新版面

主题:请教moz!!行行好,帮帮忙吧!!!!

密码:1 2 3 4 5 6 7 8 9
在空格处填入适当的'+'或'-'使得数等于输入的X
例如:X=182
     123+45+6+7-8+9
输入X后,打印所有的可能性!

回复列表 (共27个回复)

11 楼

代码都给你了,自己不会运行一下试着看看理解一下代码的作用啊?

1&2=12    &是VB里的连字符,在QB里,可以这样代替

ltrim$(str$(1))+ltrim$(str$(2))

12 楼

这题不能用其他的方法吗?

13 楼

DEFLNG A-Z           [color=0000ff]'把所有变量默认为长整形变量,不要也行. [/color]
INPUT X
FOR i = 1 TO 3 ^ 8   [color=0000ff]'加号,减号,没有符号,共三种情形,八个位置 [/color]
    s$ = SSS$((i))   [color=0000ff]'总共 3^8 种不同的排列组合,获得式子字符串 [/color]
    IF XXX((s$)) = X THEN PRINT s$    [color=0000ff]'符合条件的结果 [/color]
NEXT                 [color=0000ff]'两个双括号的作用是避免函数修改参数的值. [/color]

FUNCTION SSS$ (a)    [color=0000ff]'函数的作用是把不同状态换成有数字和符号的式子 [/color]
b$ = "1"             [color=0000ff]'没有说前面会不会有负号,所以用1带头了. [/color]
FOR i = 50 TO 57     [color=0000ff]'8次分解,用来判断8个位置上应该放什么符号 [/color]
    c = a MOD 3      [color=0000ff]'分解,利用的是余数,理解进制的含义就能明白 [/color]
    a = a \ 3        [color=0000ff]'消除当次分解 [/color]
    IF c>0 THEN b$=b$+MID$("+-",c,1)  [color=0000ff]'判断符号,加号,减号,还是没有符号 [/color]
    b$ = b$ + CHR$(i)[color=0000ff]'连上下一个数字.没有符号就是一个多位数 [/color]
NEXT
SSS$ = b$            [color=0000ff]'获得转换后的式子(是字符串类型) [/color]
END FUNCTION

FUNCTION XXX (s$)    [color=0000ff]'计算表达式的值 [/color]
DO
   a = VAL(s$)       [color=0000ff]'获得第一个整数的值 [/color]
   c = LEN(STR$(a))  [color=0000ff]'检查第一个整数的位数 [/color]
   b = VAL(MID$(s$,c+1))  [color=0000ff]'获得第二个整数的值 [/color]
   d = LEN(STR$(b))       [color=0000ff]'检查第二个整数的位数 [/color]
   SELECT CASE MID$(s$, c, 1)  [color=0000ff]'检查运算符号 [/color]
   CASE "+": e = a + b         [color=0000ff]'加法运算 [/color]
   CASE "-": e = a - b         [color=0000ff]'减法运算 [/color]
   CASE ELSE: EXIT DO          [color=0000ff]'找不到运算符号,也就是完成计算了. [/color]
   END SELECT
   s$ = LTRIM$(STR$(e))+MID$(s$,c+d) [color=0000ff]'去除已运算式子和空格. [/color]
LOOP
XXX = e       [color=0000ff]'获得式子的计算结果,去判断是否符合条件即可. [/color]
END FUNCTION

还有什么问题?

14 楼

有劳,有劳!!

15 楼

你怎么在PASCAL上面也发了这个题目?我回过了。

16 楼

用DO.FOR作

17 楼

有点象以前考秀才时候要写的八股文........

18 楼

cls
input n
for i=1 to 9
 a(i)=i
next i
c$(0)="+":c$(1)=0
do wheil b(1)=0
 s=a(1)
 for i=2 to 9
  if b(i)=0 then s=s+a(i) else s=s-a(i)
 next i
 if s=n then 
  print a(i);
  for j=2 to 8
   print c$(s);a(j)
  next j
  print "=";n
 end if
 k=9
 do wheil n=s
  k=k-1
  s=s+a(k)
  loop
  b(k)="0"
loop
end

19 楼


cls
input n
for i=1 to 9
 a(i)=i
next i
c$(0)="+":c$(1)=0
do wheil b(1)=0
 s=a(1)
 for i=2 to 9
  if b(i)=0 then s=s+a(i) else s=s-a(i)
 next i
 if s=n then 
  print a(i);
  for j=2 to 8
   print c$(s);a(j)
  next j
  print "=";n
 end if
 k=9
 do wheil n=s
  k=k-1
  s=s+a(k)
  loop
  b(k)="0"
loop
end

20 楼

加分!!!!!!!

我来回复

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