回 帖 发 新 帖 刷新版面

主题:[讨论]求助:一道题

设有数2,3,5,7,13,运算符号+,-,*,且运算符号无优先级之分,如2+3*5=25,3*5+2=17.现给出任意一个整数N,要求用以上数和运算符,以最少的运算次数产生出N
例如:N=7, 7=7  0次运算
N=93  93=13*7+2  2次运算

回复列表 (共3个回复)

沙发

原题没有"可重复使用"的字样,但考虑任给整数N,所以按可重复使用处理的。
'1。这里列出了200以内的部分数的算法。
'2。改变数组下标,1处的3,2处的200,就可以找出更多的数的算法.
'3。你可以按需要编写输出。2006.08.08

Private Sub Command1_click()
Dim a(100000), aa(100000), b(100000), bb(100000), c(100000)
n = InputBox("请输入数字")
n = Val(n)
c(2) = "2": c(3) = "3": c(5) = "5": c(7) = "7": c(13) = "13"
bb(1) = "2": bb(2) = "3": bb(3) = "5": bb(4) = "7": bb(5) = "13"
b(1) = 2: b(2) = 3: b(3) = 5: b(4) = 7: b(5) = 13
k = 5: f = 0
Cls
If c(n) <> "" Then Print n; "="; n: Print
For i = 1 To 3 '1---
For j = 1 To k: a(j) = b(j): aa(j) = bb(j): Next j
For j = 1 To k
x = 2: Call uu(a, j, x, c, f, b, bb, aa, n)
x = 3: Call uu(a, j, x, c, f, b, bb, aa, n)
x = 5: Call uu(a, j, x, c, f, b, bb, aa, n)
x = 7: Call uu(a, j, x, c, f, b, bb, aa, n)
x = 13: Call uu(a, j, x, c, f, b, bb, aa, n)
Next j
k = f: f = 0
Next i
For i = 1 To 200 '2----
Print Tab(o * 25); i; "="; c(i);
o = o + 1
If i = Int(i / 5) * 5 Then Print: o = 0
Next i
End Sub
Sub uu(a, j, x, c, f, b, bb, aa, n)
d = a(j) + x
If c(d) = "" Then
f = f + 1
b(f) = d
bb(f) = aa(j) + "+" + Str(x)
c(d) = bb(f)
If d = n Then Print n; "="; c(n): Print
End If
d = a(j) * x
If c(d) = "" Then
f = f + 1
b(f) = d
bb(f) = aa(j) + "*" + Str(x)
c(d) = bb(f)
If d = n Then Print n; "="; c(n): Print
End If
d = a(j) - x
If d > 0 Then
If c(d) = "" Then
f = f + 1
b(f) = d
bb(f) = aa(j) + "-" + Str(x)
c(d) = bb(f)
If d = n Then Print n; "="; c(n): Print
End If
End If
End Sub

板凳

你那数组的确很利害。
这就是有钱人的特征。

DECLARE FUNCTION fena$ (b%)
DEFINT A-Z
DIM SHARED n,a
n = 5
input a
dim shared sz$(a+170),s(n)
s(1) = 13
s(2) = 7
s(3) = 5
s(4) = 3
s(5) = 2
FOR i = 1 TO n
    sz$(s(i)) = LTRIM$(STR$(s(i)))
    FOR j = 1 TO n
    sz$(s(i) + s(j)) = LTRIM$(STR$(s(i))) + "+" + LTRIM$(STR$(s(j)))
    sz$(s(i) * s(j)) = LTRIM$(STR$(s(i))) + "*" + LTRIM$(STR$(s(j)))
NEXT j, i
sz$(1)="3-2"

PRINT a; "="; fena(a)
end

FUNCTION fena$ (b)
    IF b = 0 THEN EXIT FUNCTION
    IF b < a THEN
       IF sz$(b) <> "" THEN
          fena$ = sz$(b)
          EXIT FUNCTION
       END IF
    END IF

    FOR i = 1 TO n
    IF b > s(i) THEN
       c = b \ s(i) + 1
       d = c * s(i) - b
       e$ = fena$(c) + "*" + LTRIM$(STR$(s(i)))
       IF d > 0 THEN e$ = e$ + "-" + fena$(d)
       IF en$ = "" THEN en$ = e$
       IF LEN(e$) < LEN(en$) THEN en$ = e$

       c = c - 1
       d = b - c * s(i)
       e$ = fena$(c) + "*" + LTRIM$(STR$(s(i)))
       IF d > 0 THEN e$ = e$ + "+" + fena$(d)
       IF en$ = "" THEN en$ = e$
       IF LEN(e$) < LEN(en$) THEN en$ = e$
    END IF
    NEXT
    sz$(b)= en$
    fena$ = en$
END FUNCTION

3 楼

Private Sub Command1_click()
Dim a(100000), aa(100000), b(100000), bb(100000), c(100000)
n = InputBox("请输入数字")
n = Val(n)
c(2) = "2": c(3) = "3": c(5) = "5": c(7) = "7": c(13) = "13"
bb(1) = "2": bb(2) = "3": bb(3) = "5": bb(4) = "7": bb(5) = "13"
b(1) = 2: b(2) = 3: b(3) = 5: b(4) = 7: b(5) = 13
k = 5: f = 0
Cls
If c(n) <> "" Then Print n; "="; n: Print
For i = 1 To 3 '1---
For j = 1 To k: a(j) = b(j): aa(j) = bb(j): Next j
For j = 1 To k
x = 2: Call uu(a, j, x, c, f, b, bb, aa, n)
x = 3: Call uu(a, j, x, c, f, b, bb, aa, n)
x = 5: Call uu(a, j, x, c, f, b, bb, aa, n)
x = 7: Call uu(a, j, x, c, f, b, bb, aa, n)
x = 13: Call uu(a, j, x, c, f, b, bb, aa, n)
Next j
k = f: f = 0
Next i
For i = 1 To 200 '2----
Print Tab(o * 25); i; "="; c(i);
o = o + 1
If i = Int(i / 5) * 5 Then Print: o = 0
Next i
End Sub
Sub uu(a, j, x, c, f, b, bb, aa, n)
d = a(j) + x
If c(d) = "" Then
f = f + 1
b(f) = d
bb(f) = aa(j) + "+" + Str(x)
c(d) = bb(f)
If d = n Then Print n; "="; c(n): Print
End If
d = a(j) * x
If c(d) = "" Then
f = f + 1
b(f) = d
bb(f) = aa(j) + "*" + Str(x)
c(d) = bb(f)
If d = n Then Print n; "="; c(n): Print
End If
d = a(j) - x
If d > 0 Then
If c(d) = "" Then
f = f + 1
b(f) = d
bb(f) = aa(j) + "-" + Str(x)
c(d) = bb(f)
If d = n Then Print n; "="; c(n): Print
End If
End If
End Sub

我来回复

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