主题:请教moz!!行行好,帮帮忙吧!!!!
纯情鸭鸭
[专家分:30] 发布于 2007-07-21 13:34:00
密码:1 2 3 4 5 6 7 8 9
在空格处填入适当的'+'或'-'使得数等于输入的X
例如:X=182
123+45+6+7-8+9
输入X后,打印所有的可能性!
回复列表 (共27个回复)
11 楼
moz [专家分:37620] 发布于 2007-07-22 12:08:00
代码都给你了,自己不会运行一下试着看看理解一下代码的作用啊?
1&2=12 &是VB里的连字符,在QB里,可以这样代替
ltrim$(str$(1))+ltrim$(str$(2))
12 楼
纯情鸭鸭 [专家分:30] 发布于 2007-07-22 12:15:00
这题不能用其他的方法吗?
13 楼
moz [专家分:37620] 发布于 2007-07-22 12:20:00
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 楼
纯情鸭鸭 [专家分:30] 发布于 2007-07-22 12:22:00
有劳,有劳!!
15 楼
Matodied [专家分:7560] 发布于 2007-07-22 14:35:00
你怎么在PASCAL上面也发了这个题目?我回过了。
16 楼
剑圣风暴 [专家分:450] 发布于 2007-07-23 12:34:00
用DO.FOR作
17 楼
冷石_jasv [专家分:1570] 发布于 2007-07-23 12:43:00
有点象以前考秀才时候要写的八股文........
18 楼
剑圣风暴 [专家分:450] 发布于 2007-07-24 06:25:00
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 楼
剑圣风暴 [专家分:450] 发布于 2007-07-24 06:25:00
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 楼
剑圣风暴 [专家分:450] 发布于 2007-07-24 06:27:00
加分!!!!!!!
我来回复