主题:妈呀!咋办呀!!!!
Lovely哆啦
[专家分:1360] 发布于 2007-03-26 12:21: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$",……
[em8][em8][em8][em10][em10][em18][em18][em18]
回复列表 (共10个回复)
沙发
随便你好 [专家分:530] 发布于 2007-03-30 16:39:00
CLS
INPUT N$
N=LEN(N$)-1
FOR I=1 TO N
IF MID$(N$,I,1)<>"0" THEN P=P+1
NEXT I
MIN=4
IF P<3 THEN ?"ERROR":END
IF P>=3 THEN
N$=MID$(N$,1,N)
FOR I=1 TO N-2
FOR J=I+1 TO N-1
A=VAL(MID$(N$,1,I))
B=VAL(MID$(N$,I+1,J-I))
C=VAL(MID$(N$,J+1,N-J))
IF A*B*C<>0 THEN
S=1/A+1/B+1/C:IF S<MIN THEN MIN=S
END IF
NEXT J,I
?USING"#.######";MIN
END IF
END
[em1][em16]
板凳
游戏之王 [专家分:540] 发布于 2007-04-04 17:47: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
3 楼
小精灵LS [专家分:580] 发布于 2007-04-04 17: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-04 17:56:00
CLS
INPUT N$
N=LEN(N$)-1
FOR I=1 TO N
IF MID$(N$,I,1)<>"0" THEN P=P+1
NEXT I
MIN=4
IF P<3 THEN ?"ERROR":END
IF P>=3 THEN
N$=MID$(N$,1,N)
FOR I=1 TO N-2
FOR J=I+1 TO N-1
A=VAL(MID$(N$,1,I))
B=VAL(MID$(N$,I+1,J-I))
C=VAL(MID$(N$,J+1,N-J))
IF A*B*C<>0 THEN
S=1/A+1/B+1/C:IF S<MIN THEN MIN=S
END IF
NEXT J,I
?USING"#.######";MIN
END IF
END
5 楼
QB.N [专家分:80] 发布于 2007-04-11 18:12:00
CLS
INPUT N$
N=LEN(N$)-1
FOR I=1 TO N
IF MID$(N$,I,1)<>"0" THEN P=P+1
NEXT I
MIN=4
IF P<3 THEN ?"ERROR":END
IF P>=3 THEN
N$=MID$(N$,1,N)
FOR I=1 TO N-2
FOR J=I+1 TO N-1
A=VAL(MID$(N$,1,I))
B=VAL(MID$(N$,I+1,J-I))
C=VAL(MID$(N$,J+1,N-J))
IF A*B*C<>0 THEN
S=1/A+1/B+1/C:IF S<MIN THEN MIN=S
END IF
NEXT J,I
?USING"#.######";MIN
END IF
END
6 楼
V2战警2 [专家分:390] 发布于 2007-07-26 18: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[/quote]
7 楼
Lovely哆啦 [专家分:1360] 发布于 2007-07-26 18:17:00
V2战警2和QB.N纯属抄袭!!!!
气愤!!!
8 楼
wzc1996 [专家分:1680] 发布于 2007-07-26 20:59:00
CLS
INPUT N$
N=LEN(N$)-1
FOR I=1 TO N
IF MID$(N$,I,1)<>"0" THEN K=K+1
NEXT I
MIN=4
IF K<3 THEN ?"ERROR":END
IF K>=3 THEN
N$=MID$(N$,1,N)
FOR I=1 TO N-2
FOR J=I+1 TO N-1
A=VAL(MID$(N$,1,I))
B=VAL(MID$(N$,I+1,J-I))
C=VAL(MID$(N$,J+1,N-J))
IF A*B*C<>0 THEN
S=1/A+1/B+1/C:IF S<MIN THEN MIN=S
END IF
NEXT J,I
PRINT USING"#.######";MIN
END IF
END
9 楼
Lovely哆啦 [专家分:1360] 发布于 2007-07-27 07:57:00
抄袭!!!
气愤!!!
10 楼
我的电脑 [专家分:990] 发布于 2007-09-28 13:58: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
我来回复