主题:来帮忙做个小题
聪明一袋烟
[专家分:330] 发布于 2008-02-27 23:54:00
是这么个题目 用 0-9 十个数码组成a+b=c的形式,其中a、b均为三位数,c为四位数要求刚才的10个数码不重复也不遗漏,找到所有满足的式子,请大家发挥自己的聪明才智找到最优的做法。
回复列表 (共11个回复)
沙发
聪明一袋烟 [专家分:330] 发布于 2008-02-28 21:39:00
各位大哥咋都没回应那?
板凳
moz [专家分:37620] 发布于 2008-02-28 23:39:00
还是一袋烟聪明一些,大家请他来指点我们一下吧。
3 楼
moisev [专家分:110] 发布于 2008-02-29 09:24:00
想了很久,始终都是发现自己的算法很烂。等待看楼主的答案…
4 楼
moz [专家分:37620] 发布于 2008-03-03 23:54:00
即然聪明的一袋烟一阵烟般的消失了,
我只好把我最愚蠢的办法发发上来请聪明的一袋烟指正一下了:
可以事先声明,这绝对不是优的做法.
DEFINT A-Z
FOR i = 203 TO 897
FOR j = i + 1 TO 987
IF s(i, j) THEN PRINT i; "+"; j; "="; i + j,
NEXT j, i
FUNCTION s (i, j)
x$ = STR$(i) + STR$(j) + STR$(i + j)
FOR y = 48 TO 57
IF INSTR(x$, CHR$(y)) = 0 THEN EXIT FOR
NEXT
s = y > 57
END FUNCTION
明天再把另一种办法(有一大堆的 and )发上来让大家看看嘲笑一下.
5 楼
moz [专家分:37620] 发布于 2008-03-04 17:23:00
DEFINT A-B
a7 = 1
FOR a1 = 2 TO 8
FOR a4 = a1 + 1 TO 9
FOR a2 = 0 TO 9
IF a2 <> a1 AND a2 <> a4 AND a2 <> a7 THEN
FOR a3 = 2 TO 9
IF a3 <> a1 AND a3 <> a2 AND a3 <> a4 AND a3 <> a7 THEN
FOR a5 = 0 TO 9
IF a5 <> a1 AND a5 <> a2 AND a5 <> a3 AND a5 <> a4 AND a5 <> a7 THEN
FOR a6 = 2 TO 9
IF a6 <> a1 AND a6 <> a2 AND a6 <> a3 AND a6 <> a4 AND a6 <> a5 AND a6 <> a7 THEN
b = (a1 + a4) * 100 + (a2 + a5) * 10 + a3 + a6
IF b > 1022 THEN
a8 = b \ 100 MOD 10
a9 = b \ 10 MOD 10
a10 = b MOD 10
IF a1 + a2 + a3 + a4 + a5 + a6 + a7 + a8 + a9 + a10 = 45 AND (((a1 + 1&) * (a2 + 1&) * (a3 + 1&) * (a4 + 1&) * (a5 + 1&) * (a6 + 1&) * (a7 + 1&) * (a8 + 1&) * (a9 + 1&) * (a10 + 1&)) = 3628800) THEN PRINT a1; _
a2; a3; "+"; a4; a5; a6; "="; a7; a8; a9; a10
END IF
END IF
NEXT
END IF
NEXT
END IF
NEXT
END IF
NEXT a2, a4, a1
6 楼
wzc1996 [专家分:1680] 发布于 2008-03-09 08:46:00
应该可以优化
7 楼
ye243088621 [专家分:20] 发布于 2008-03-19 21:47:00
我是新来的新手 不知道我编写的行不行 大家只当看一个笑话吧!!!如果不对请大家指出我的错误之处!!! 谢谢了!!!
QB:
for a = 102 to 987
for b = 102 to 987
c = a + b
if a=b and (1000<=c and 9999>=c) then
else
print a,b,c
end if
next b
next a
end
8 楼
moz [专家分:37620] 发布于 2008-03-19 23:04:00
楼上勇气可嘉,值得赞扬和鼓励,任何人都没有资格取笑.
相反的,更让我发现我自己的错误,所以我更感谢楼上.
除此以外,楼上也应该看看,有没有更多的条件?更小的范围去循环,而且条件完备没有?
不管别人的对还是错,看看总没错,会让自己多一条思路,对不?
9 楼
ye243088621 [专家分:20] 发布于 2008-03-21 18:38:00
上次没有理解题意 所以搞了一个笑话出来,现在我得新编了一个让各位看看,如果有错请大家指出.谢谢大家了
For i = 1 To 9
For j = 0 To 9
If i = j Then GoTo 10
For k = 0 To 9
If i = k Or j = k Then GoTo 100
a = 100 * i + 10 * j + k
GoSub BB
100 Next k
10 Next j
Next i
End
BB: For x = 1 To 9
If x = i Or x = j Or x = k Then GoTo 20
For y = 0 To 9
If y = i Or y = j Or y = k Or y = x Then GoTo 200
For z = 0 To 9
If z = i Or z = j Or z = k Or z = x Or z = y Then GoTo 2000
B = 100 * x + 10 * y + z
C = a + B
GoSub pd
2000 Next z
200 Next y
20 Next x
Return
pd: f$ = Str$(C)
If Len(f$) = 5 Then
p = 1
For q = 2 To 5
w = Val(Mid$(f$, q, 1))
If w = i Or w = j Or w = k Or w = x Or w = y Or w = z Then
p = 0
End If
Next q
If p = 1 Then print a,b,c
End If
Return
10 楼
moz [专家分:37620] 发布于 2008-03-21 20:01:00
我看了一下最后的一个结果:
976+405=1381 好像没找着2
另外: if.....endif 可以代替goto
sub....end sub 可以代替 gosub
我来回复