主题:我在这里请教各位编程高手了!
小精灵LS
[专家分:580] 发布于 2007-04-04 17:07:00
求分数和的最小值。
给出一个数字字符串,即字符串中的字符全部为数字,
并以字符“$”结束(字符“$”本身不是数字符,仅作为结束符号)。
例如:"12$","2135$","312456$",……
并设字符串的长度L<=8(包括“$”)。
今将数字字符串分成三个部分(分法为任意的),例如:
"31245$"可分为"3","124","56";
或者"31","24","56",……
从上例可看出,当数字串给出之后,分成三部分的分法是许多的(每一部分不能为空),
对每一种分法,可以得到三个数和三个分数。例如:
分法"3","124","56"对应的三个数为3,124,56
对应分数为:1/3,1/124,1/56。
分法"31","24","56"对应的三个数为31,24,56
对应分数为:1/31,1/24,1/56。
程序要求:从键盘输入一个数字串(以“$”作为结束符号)。
找出一种分法,使得到的三个分数的和S为最小,输出S的值(精确到小数点后的第6位)。
若给出的数字串中,非0的字符少于3个,则此时不能组成三个数,输出一个“ERROR”。
例如:"12$","100100$",……
回复列表 (共8个回复)
沙发
游戏之王 [专家分:540] 发布于 2007-04-05 17:33:00
CLS
INPUT S$
N = LEN(S$) - 1
FOR I = 1 TO N
IF MID$(S$, I, 1) <> "0" THEN P = P + 1
NEXT I
MIN = 4
IF P < 3 THEN PRINT "ERROR!": END
S$ = MID$(S$, 1, N)
FOR I = 1 TO N - 2: FOR J = I + 1 TO N - 1
S1 = VAL(MID$(S$, 1, I))
S2 = VAL(MID$(S$, I + 1, J - I))
S3 = VAL(MID$(S$, J + 1, N - J))
IF S1 * S2 * S3 <> 0 THEN
S = 1 / S1 + 1 / S2 + 1 / S3
IF S < MIN THEN MIN = S
END IF
NEXT J, I
PRINT USING "#.######"; MIN
END
板凳
chyx [专家分:450] 发布于 2007-04-05 18:44:00
CLS
INPUT N$
N = LEN(N$)
FOR I = 1 TO N - 1
IF MID$(N$, I, 1) <> "0" THEN P = P + 1
NEXT I: MIN = 4
IF P < 3 THEN PRINT "ERROR": END
N$ = MID$(N$, 1, N)
FOR I = 1 TO N - 2
FOR J = I + 1 TO N - 1
S1 = VAL(MID$(N$, 1, I))
S2 = VAL(MID$(N$, I + 1, J - I))
S3 = VAL(MID$(N$, J + 1, N - J))
IF S1 * S2 * S3 <> 0 THEN
S = 1 / S1 + 1 / S2 + 1 / S3
IF S < MIN THEN MIN = S
END IF
NEXT J, I
PRINT USING "#.######"; MIN
END
3 楼
hhhchy [专家分:300] 发布于 2007-04-06 16:54:00
CLS
INPUT S$
N = LEN(S$) - 1
FOR I = 1 TO N
IF MID$(S$, I, 1) <> "0" THEN P = P + 1
NEXT I
MIN = 4
IF P < 3 THEN PRINT "ERROR!": END
S$ = MID$(S$, 1, N)
FOR I = 1 TO N - 2: FOR J = I + 1 TO N - 1
S1 = VAL(MID$(S$, 1, I))
S2 = VAL(MID$(S$, I + 1, J - I))
S3 = VAL(MID$(S$, J + 1, N - J))
IF S1 * S2 * S3 <> 0 THEN
S = 1 / S1 + 1 / S2 + 1 / S3
IF S < MIN THEN MIN = S
END IF
NEXT J, I
PRINT USING "#.######"; MIN
END
4 楼
黑白猪-- [专家分:420] 发布于 2007-04-08 16:57:00
CLS
INPUT S$
N = LEN(S$) - 1
FOR I = 1 TO N
IF MID$(S$, I, 1) <> "0" THEN P = P + 1
NEXT I
MIN = 4
IF P < 3 THEN PRINT "ERROR!": END
S$ = MID$(S$, 1, N)
FOR I = 1 TO N - 2: FOR J = I + 1 TO N - 1
S1 = VAL(MID$(S$, 1, I))
S2 = VAL(MID$(S$, I + 1, J - I))
S3 = VAL(MID$(S$, J + 1, N - J))
IF S1 * S2 * S3 <> 0 THEN
S = 1 / S1 + 1 / S2 + 1 / S3
IF S < MIN THEN MIN = S
END IF
NEXT J, I
PRINT USING "#.######"; MIN
END
5 楼
Lovely哆啦 [专家分:1360] 发布于 2007-04-08 16:57:00
CLS
INPUT S$
N = LEN(S$) - 1
FOR I = 1 TO N
IF MID$(S$, I, 1) <> "0" THEN P = P + 1
NEXT I
MIN = 4
IF P < 3 THEN PRINT "ERROR!": END
S$ = MID$(S$, 1, N)
FOR I = 1 TO N - 2: FOR J = I + 1 TO N - 1
S1 = VAL(MID$(S$, 1, I))
S2 = VAL(MID$(S$, I + 1, J - I))
S3 = VAL(MID$(S$, J + 1, N - J))
IF S1 * S2 * S3 <> 0 THEN
S = 1 / S1 + 1 / S2 + 1 / S3
IF S < MIN THEN MIN = S
END IF
NEXT J, I
PRINT USING "#.######"; MIN
END
6 楼
随便你好 [专家分:530] 发布于 2007-04-08 17:04:00
CLS
INPUT S$
N = LEN(S$) - 1
FOR I = 1 TO N
IF MID$(S$, I, 1) <> "0" THEN P = P + 1
NEXT I
MIN = 4
IF P < 3 THEN PRINT "ERROR!": END
S$ = MID$(S$, 1, N)
FOR I = 1 TO N - 2: FOR J = I + 1 TO N - 1
S1 = VAL(MID$(S$, 1, I))
S2 = VAL(MID$(S$, I + 1, J - I))
S3 = VAL(MID$(S$, J + 1, N - J))
IF S1 * S2 * S3 <> 0 THEN
S = 1 / S1 + 1 / S2 + 1 / S3
IF S < MIN THEN MIN = S
END IF
NEXT J, I
PRINT USING "#.######"; MIN
END
7 楼
蓝莎菲莹 [专家分:370] 发布于 2007-04-08 17:23:00
CLS
INPUT S$
N = LEN(S$) - 1
FOR I = 1 TO N
IF MID$(S$, I, 1) <> "0" THEN P = P + 1
NEXT I
MIN = 4
IF P < 3 THEN PRINT "ERROR!": END
S$ = MID$(S$, 1, N)
FOR I = 1 TO N - 2: FOR J = I + 1 TO N - 1
S1 = VAL(MID$(S$, 1, I))
S2 = VAL(MID$(S$, I + 1, J - I))
S3 = VAL(MID$(S$, J + 1, N - J))
IF S1 * S2 * S3 <> 0 THEN
S = 1 / S1 + 1 / S2 + 1 / S3
IF S < MIN THEN MIN = S
END IF
NEXT J, I
PRINT USING "#.######"; MIN
END
8 楼
爱丽斯LING [专家分:560] 发布于 2007-04-08 17:24:00
CLS
INPUT S$
N = LEN(S$) - 1
FOR I = 1 TO N
IF MID$(S$, I, 1) <> "0" THEN P = P + 1
NEXT I
MIN = 4
IF P < 3 THEN PRINT "ERROR!": END
S$ = MID$(S$, 1, N)
FOR I = 1 TO N - 2: FOR J = I + 1 TO N - 1
S1 = VAL(MID$(S$, 1, I))
S2 = VAL(MID$(S$, I + 1, J - I))
S3 = VAL(MID$(S$, J + 1, N - J))
IF S1 * S2 * S3 <> 0 THEN
S = 1 / S1 + 1 / S2 + 1 / S3
IF S < MIN THEN MIN = S
END IF
NEXT J, I
PRINT USING "#.######"; MIN
END
我来回复