回 帖 发 新 帖 刷新版面

主题:来帮忙做个小题

是这么个题目 用 0-9 十个数码组成a+b=c的形式,其中a、b均为三位数,c为四位数要求刚才的10个数码不重复也不遗漏,找到所有满足的式子,请大家发挥自己的聪明才智找到最优的做法。

回复列表 (共11个回复)

沙发

各位大哥咋都没回应那?

板凳

还是一袋烟聪明一些,大家请他来指点我们一下吧。

3 楼

想了很久,始终都是发现自己的算法很烂。等待看楼主的答案…

4 楼

即然聪明的一袋烟一阵烟般的消失了,
我只好把我最愚蠢的办法发发上来请聪明的一袋烟指正一下了:
可以事先声明,这绝对不是优的做法.

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 楼

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 楼

应该可以优化

7 楼


我是新来的新手   不知道我编写的行不行   大家只当看一个笑话吧!!!如果不对请大家指出我的错误之处!!!    谢谢了!!!
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 楼

楼上勇气可嘉,值得赞扬和鼓励,任何人都没有资格取笑.

相反的,更让我发现我自己的错误,所以我更感谢楼上.

除此以外,楼上也应该看看,有没有更多的条件?更小的范围去循环,而且条件完备没有?
不管别人的对还是错,看看总没错,会让自己多一条思路,对不?

9 楼

上次没有理解题意  所以搞了一个笑话出来,现在我得新编了一个让各位看看,如果有错请大家指出.谢谢大家了
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 楼

我看了一下最后的一个结果:
976+405=1381  好像没找着2

另外: if.....endif 可以代替goto
sub....end sub 可以代替 gosub

我来回复

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