小学信息竞赛复赛程序题QB

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

最频繁的字母【火热话题(6)】

【问题描述】

小明是一名翻译,每天都要看着令人头疼的英文。他无聊时会想一些很奇怪的问题,例如英文单词是如何组成的,它们有什么来源等等。有一天他突然想,到底哪个英文字母在英文单词中出现的频率最高呢?他发现这个工作量还是很大的,于是找到了你帮助他解决这个问题。他会提供你一个仅由26个小写字母(a – z)组成的字符串s(中间不含空格),请你计算一下这字符串s中哪个字母出现的次数最多,如果说出现次数最多的字母不止一个,那么请把他们都打印出来,按照字母表的顺序输出(abcdefg …… xyz),也就是按照这些字母的ASCII 由小到大输出出来。

每组数据都只有一行,就是题目中所描述的字符串s,它的长度不会超过200。

你也只需输出一行,即出现次数最多的字母。(如果很多,就按字母表序输出)

【样例输入1】

abaca

【样例输出1】

a(解释:由于a出现了3次,而b和c都只出现了1次。)

【样例输入2】

msmcatac

【样例输出2】

acm(解释:由于m, c, a都出现了2次,只要把m, c, a按照字母表的顺序输出即可

OPEN "letter.in" FOR INPUT AS #1

OPEN "letter.out" FOR OUTPUT AS #2

DIM a(97 TO 122)

INPUT #1, x$ '读入一个字符串保存在x$中

k = LEN(x$)'求字符串x$的长度

FOR i = 97 TO 122

a(i) = 0

NEXT i

FOR i = 1 TO k'分别统计26个小写字母各自出现的次数

y$ = MID$(x$, i, 1)'取出当前x$中的第i位字符

m = ASC(y$)'转换当前的y$的ASCII码值

a(m) = a(m) + 1'说明以m为ASCII码值的字符曾出现过一次

NEXT i

max = 0

FOR i = 97 TO 122'搜索出现次数最多的字母次数

IF a(i) > max THEN max = a(i)

NEXT i

FOR i = 97 TO 122'输出出现次数最多的字母

IF a(i) = max THEN

PRINT #2, CHR$(i);

END IF

NEXT i

CLOSE

END

宝藏迷宫

源代码: maze.bas

输入文件: maze.in

输出文件: maze.out

【问题描述】

小明被困在了一个装满宝藏的迷宫里。迷宫的结构很特殊,是一个m * n的方格,每个格子里都有宝藏,我们用一个正整数来表示宝藏的多少,整数越大表示此格子内的宝藏越多。在迷宫中,他每次只能走向他右边的格子或者下边的格子,小明非常贪心,所有走过格子里的宝藏他都会带走(包括起始点和终止点)。他开始站在左上角的格子里,最终要从右下角的格子离开迷宫,请问他最多能拿走多少宝物?

下面就是一个2 * 3的迷宫:

小明开始站在左上角,很容易看出,他最优的线路是:右、右、下,他一路上得到的宝藏数依次为: 3, 10, 50, 2。他如果走这条路径的话会得到65的宝藏,这也是他所有走法中获得宝藏最多的走法。

每组数据第一行均有两个整数(用空格隔开),分别表示m和n ( 2 <= m , n <= 50),即迷宫的行数和列数。从第二行开始,输入一个m*n的矩阵(每行内的整数都用空格隔开),分别表示每个格子内部的宝藏数,保证每个格子的宝藏数不超过100。对

于每组数据你只要输出一个整数即可,表示小明可以拿到宝藏的最大值。

【样例输入1】

2 3

3 10 50

15 12 2

【样例输出1】

65(解释:题目中已经描述。)

【样例输入2】

3 3

2 2 2

2 2 2

2 2 2

【样例输出2】

10(解释:无论小明采取什么样的走法,他最后得到的宝藏数都是2 * 5 = 10。)

DIM casenum AS INTEGER, row AS INTEGER, col AS INTEGER

OPTION BASE 0

DIM ans(60, 60) AS INTEGER, map(60, 60) AS INTEGER

OPEN "maze.in" FOR INPUT AS #1

OPEN "maze.out" FOR OUTPUT AS #2

FOR casenum = 1 TO 5

INPUT #1, row

INPUT #1, col

FOR i = 1 TO row

FOR j = 1 TO col

INPUT #1, map(i, j)

NEXT j

NEXT i

FOR i = 1 TO row

FOR j = 1 TO col

ans(i, j) = 0

NEXT i

FOR i = 1 TO row

FOR j = 1 TO col

IF ans(i - 1, j) > ans(i, j - 1) THEN

ans(i, j) = ans(i - 1, j) + map(i, j)

ELSE

ans(i, j) = ans(i, j - 1) + map(i, j)

END IF

NEXT j

NEXT i

WRITE #2, ans(row, col)

NEXT casenum

OPEN "maze.in" FOR INPUT AS #1

OPEN "maze.out" FOR OUTPUT AS #2

INPUT #1, m, n

DIM a(m, n), ans(m, n)

FOR i = 1 TO m

FOR j = 1 TO n

INPUT #1, a(i, j)

NEXT j

NEXT i

FOR i = 1 TO m

FOR j = 1 TO n

IF ans(i - 1, j) > ans(i, j - 1) THEN

ans(i, j) = ans(i - 1, j) + a(i, j)

ELSE

ans(i, j) = ans(i, j - 1) + a(i, j)

END IF

NEXT j

NEXT i

WRITE #2, ans(m, n)

CLOSE

END

明明的随机数源代码: random.bas

输入文件: random.in

输出文件: random.out

相关文档
最新文档