回 帖 发 新 帖 刷新版面

主题:这是我们的竞赛题,看你们能做出来几道

(各题加分: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 楼

我给你分了

12 楼

第二题做得不错,
第三题应该是求最短和最长时间吧,应该不难吧,只是比较难理解,实际情况总是难预料的.
第四题对于年老色衰的我来说有点难度,我没有足够的脑汁分泌了.
只写一写第一题:四种括号多了点,我以前只做一种括号坎套的.

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 楼

都可以做出来!!

14 楼

13楼的,你不要吹牛B!

15 楼

第四题我总理不出思路,越大的阶乘后面0越多!

16 楼

望楼主给一下程序

17 楼

第四题的简单解法应该是这样子的:

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 楼

看来第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 楼

你做的对不对我不知道,
不过我想听听你的想法,
我做过试验,只是不知道以下经验是否正确:
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 楼

第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 正确!

我来回复

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