主题:这是我们的竞赛题,看你们能做出来几道
Matodied
[专家分:7560] 发布于 2007-04-19 20:18:00
(各题加分:20 10 20 30)
1、字符串匹配问题:输入一个带括号的字符串,(四种括号:( ) < > [ ] { })如果
括号全部成对出现,并且顺序正确,称为匹配,否则不匹配。
示例:
匹配的字符串:(ABC[D{E}]FGH)、<ERROR>、(<[1234{5}]>)
不匹配的字符串:(34789、(A[BC)DEF]、(<6667}
如果输入的字符串没有括号,如ABCD,则让你重新输入。
2、任何一个数的三次方都能表示成一串奇数的和,如3^3=11+9+7,现输入一个数,把这串奇数打印出来。
如:输入4,输出19+17+15+13=64=4^3。
3、有N个人要接受检测,每个人检测的时间为3-7分钟,现有三个检测员同时检测,求要多长时间。
4、输入N,输出N!的最后一位非0的数字(10000<N<10000000000)。
回复列表 (共67个回复)
11 楼
wzc1996 [专家分:1680] 发布于 2007-04-22 14:50:00
我给你分了
12 楼
moz [专家分:37620] 发布于 2007-04-23 01:17:00
第二题做得不错,
第三题应该是求最短和最长时间吧,应该不难吧,只是比较难理解,实际情况总是难预料的.
第四题对于年老色衰的我来说有点难度,我没有足够的脑汁分泌了.
只写一写第一题:四种括号多了点,我以前只做一种括号坎套的.
do
input S$
loop until Funs(s$)
function Funs(s$)
b$=""
for i=1 to len(s$)
a$=mid$(s$,i,1)
if instr("(){}[]<>",a$) then b$=b$+a$
next
if b$="" then exit function else Funs=-1
for i=1 to len(b$)\2
replace b$,"()"
replace b$,"<>"
replace b$,"[]"
replace b$,"{}"
next
if b$="" then print "括号完全匹配" else print "括号不匹配"
end function
sub replace(b$,k$)
i=instr(b$,k$)
if i>0 then b$=left$(b$,i-1)+mid$(b$,i+2)
end sub
13 楼
knate [专家分:570] 发布于 2007-04-23 08:41:00
都可以做出来!!
14 楼
Matodied [专家分:7560] 发布于 2007-04-23 14:55:00
13楼的,你不要吹牛B!
15 楼
&佑慧妹妹& [专家分:660] 发布于 2007-04-25 18:13:00
第四题我总理不出思路,越大的阶乘后面0越多!
16 楼
&佑慧妹妹& [专家分:660] 发布于 2007-04-25 18:13:00
望楼主给一下程序
17 楼
moz [专家分:37620] 发布于 2007-04-26 11:28:00
第四题的简单解法应该是这样子的:
input N&
s&=1
for i&=1 to N&
s&=s&*i&
do while s& mod 10=0
s&=s& \ 10
loop
s&=s& mod 10
next
print s&
显然,当N很大的时候,这种解法可能派不上用场,半天得不到结果.
至于怎样找出数字变化的规律,这是你们年轻人的事情了.我不够精力了.
18 楼
Matodied [专家分:7560] 发布于 2007-04-26 21:09:00
看来第4题你们硬是做不出来啊!我的程序:
CLS
DIM n AS DOUBLE, m AS DOUBLE, q AS DOUBLE
INPUT n
m = INT(n / 10): q = n - INT(n / 10) * 10
SELECT CASE m - INT(m / 4) * 4
CASE 0 AND m > 0: s = 6
CASE 1: s = 8
CASE 2: s = 4
CASE 3: s = 2
CASE ELSE: s = 1
END SELECT
a$ = LTRIM$(STR$(s)): DIM a(a), b(b), s(s)
FOR i = 1 TO q
b$ = LTRIM$(STR$(m * 10 + i))
ERASE a, b, s
GOSUB gjdmult
j = 0
a$ = s$
NEXT i
FOR i = LEN(a$) TO 1 STEP -1
IF MID$(a$, i, 1) <> "0" THEN PRINT MID$(a$, i, 1): END
NEXT i
END
gjdmult:
la = LEN(a$): lb = LEN(b$): DIM a(la), b(lb), s(la + lb)
FOR k = 1 TO la: a(k) = VAL(MID$(a$, la + 1 - k, 1)): NEXT k
FOR k = 1 TO lb: b(k) = VAL(MID$(b$, lb + 1 - k, 1)): NEXT k
FOR k = 1 TO la: FOR l = 1 TO lb
d = a(k) * b(l): v = k + l - 1
s(v) = s(v) + d MOD 10: s(v + 1) = s(v + 1) + s(v) \ 10 + d \ 10: s(v) = s(v) MOD 10
NEXT l, k
IF s(la + lb) = 0 THEN ls = la + lb - 1 ELSE ls = la + lb
s$ = ""
FOR k = ls TO 1 STEP -1
s$ = s$ + RTRIM$(LTRIM$(STR$(s(k))))
NEXT k
RETURN
19 楼
moz [专家分:37620] 发布于 2007-04-27 11:29:00
你做的对不对我不知道,
不过我想听听你的想法,
我做过试验,只是不知道以下经验是否正确:
f(10) =8
f(100) =8
f(1000) =8
f(10000) =8
f(100000) =8
f(50) =4
f(500) =4
f(5000) =4
f(50000) =4
f(500000) =4
如果正确的话,可以在此基础上考虑
20 楼
knate [专家分:570] 发布于 2007-05-06 14:34:00
第4题:
10 8
11 8
12 6
13 8
14 2
15 8
20 4
25 4
30 8
35 2
40 2
45 6
100 4
1000 2
10000 8
100000 6
1000000 4
看看结果怎么样!!
这个手算到25 正确!
我来回复