dfs - service - 2013年海淀区中小学生信息学奥林匹克竞赛 - 小学组试题

更新时间:2023-09-10 04:10:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

2013年海淀区中小学生信息学奥林匹克竞赛 小学组竞赛试题(每题100分,共700分)

姓名________年级______学校_________准考号________成绩__________

说明:(1)请同学们运行QBASIC语言环境(BC7.0版本)或C语言环境;

(2)以各自题目的名称,例如:shulie.bas/或shulie.c/或shulie.cpp,将源文件

存盘;

(3)建立文件读写,将最后写好的源文件,存入D:\\TEST文件夹中。 如:D:\\TEST

feiyong.bas shulie.bas tuxing.bas pfang.bas ………. ……….

一、乘车费用(题目名称:feiyong.bas/ feiyong.c/ feiyong.cpp) (100分) 【题目描述】 星期天上午小红乘出租车去本市的奶奶家。出租车计价方案为:3公里以

内(包括3公里)起步价是13元,超过3公里之后按2.3元/公里计价,整个乘车途中另加1元钱的燃油费。已知:小红到奶奶家的路程为N公里,请你计算一下小红到奶奶家的出租车费用是多少元?

【输入文件】 文件名:feiyong.in

文件中只有一行,包含1个整数N(其中1<=N<=30)表示路程, 单位:公里。

【输出文件】 文件名:feiyong.out

文件中只有一行,包含1个整数,表示乘车N公里后,出租车的费用(要求四舍五入保留整数),单位:元。

【要求】 输出数据从第一列开始。 【样例输入1】 feiyong.in的内容为: 2

【样例输出1】 feiyong.out的内容为: 14

【样例输入2】 feiyong.in的内容为: 15

【样例输出2】 feiyong.out的内容为: 42 #include #include

using namespace std;

ifstream cin(\ofstream cout(\

1

int main(int argc, char *argv[]) {

int n; double s; cin >> n; if (n <= 3) {

s = 13; } else {

s = (n - 3) * 2.3 + 13; }

s = s + 1;

cout << int(s + 0.5) << endl; system(\ return EXIT_SUCCESS; }

二、数列计算(题目名称: shulie.bas/shulie.c/shulie.cpp) (100分)

【题目描述】 有一个序列是:3,5,9,15,23,33,45…...,请同学们观察规律。现要求:指

定项数为任意的N项,计算并输出前N项;同时计算并输出前N项的和。

【输入文件】 文件名:shulie.in

文件中只有一行,包含1个整数N(其中3≤N≤20)为这个序列的项数。

【输出文件】 文件名:shulie.out

文件中共有N+1行:

前N行:每行一个整数为这个序列的前N项; 最后一行:只有一个整数为这个序列前N项的和。

【要求】 每一行的输出数据都从第一列开始输出。 【样例输入】 shulie.in的内容为: 8

【样例输出】 shulie.out的内容为: 3 5 9 15 23 33 45 59 192 #include #include

using namespace std;

2

ifstream cin(\ofstream cout(\

int main(int argc, char *argv[]) {

int n, i;

int a[100], s; a[1] = 3; s = 3; cin >> n;

cout << 3 << endl;

for (i = 2; i <= n; i++) {

a[i] = a[i - 1] + (i - 1) * 2; cout << a[i] << endl; s += a[i]; }

cout << s << endl; //system(\ return EXIT_SUCCESS; }

三、打印图形(题目名称: tuxing.bas/tuxing.c/tuxing.cpp) (100分)【题目描述】 由键盘输入任意一个自然数N,输出如下图规律的图形。 【输入文件】 文件名:tuxing.in

文件中只有一个整数N,为图形上半部分的行数(其中2<=N<=26)【输出文件】 文件名:tuxing.out 文件中为输出的图形。

【要求】 图形的最左侧从第一列开始输出。 【样例输入】 tuxing.in中有:

4 【样例输出】 tuxing.out中有下图所示的图形 。

D D CD DC BCD DCB ABCDDCBA BCD DCB CD DC D D

#include #include

using namespace std;

3

ifstream cin(\ofstream cout(\

int main(int argc, char *argv[]) {

int n; int i, j; char c; cin >> n;

for (i = 1; i <= n; i++) {

for (j = n - i + 1; j <= n; j++) {

c = j + 'A' - 1; cout << c; }

for (j = 1; j <= (n - i) * 2; j++) {

cout << \ }

for (j = n; j >= n - i + 1; j--) {

c = j + 'A' - 1; cout << c; }

cout << endl; }

for (i = n - 1; i >= 1; i--) {

for (j = n - i + 1; j <= n; j++) {

c = j + 'A' - 1; cout << c; }

for (j = 1; j <= (n - i) * 2; j++) {

cout << \ }

for (j = n; j >= n - i + 1; j--) {

c = j + 'A' - 1; cout << c; }

cout << endl; }

//system(\

4

return EXIT_SUCCESS; }

四 、完全平方数(题目名称:pfang.bas/ pfang.c/ pfang.cpp) (100分) 【题目描述】 在四位自然数中有这样一些特点的数:

(1)它们是素数;

(2)将这些素数加上45后得到一个新的数值;

(3)请同学们在这些新的数值中挑选出:是完全平方数同时末尾数字是4的这

样特点的数。例如素数:1399,加上45后,得到新数1444。而1444 满足:它是完全平方数,同时末尾数字为4。 现给出任意自然数M ~N的区间,请同学们计算并输出所有满足上述条件的数值,并统计个数。

【输入文件】 文件名:pfang.in

文件中只有一行,包含两个用空格隔开的任意自然数M和N, (其中1000≤M

【输出文件】 文件名:pfang.out

文件中共有若干行:

前若干行:每行一个数,为满足上述条件的数值;

最后一行:只有一个数,为满足上述条件的数值的个数。

【要求】 每一行的数据都从第一列开始输出。 【输入样例】 pfang.in的内容为:

1000 4000(两个数据之间空一格)

【输出样例】 pfang.out的内容为: 1444 2704 3364 3 #include #include

using namespace std;

ifstream cin(\ofstream cout(\

int main(int argc, char *argv[]) {

int a, b; int t, i, x; int s, j, z; z = 0;

cin >> a >> b;

for (i = 30; i <= 100; i++) {

t = i * i;

if (t >= a && t <= b && t % 10 == 4)

5

{

x = t - 45; s = 0;

for (j = 1; j <= x; j++) if (x % j == 0) s++; if (s == 2) {

z++;

cout << t << endl; } } }

cout << z << endl; //system(\ return EXIT_SUCCESS; }

五、踢毽子(题目名称:jianzi.bas/ jianzi.c/ jianzi.cpp) (100分)

【题目描述】 某小学五年级组的学生举办踢毽子比赛,每班选出4名同学参加。比赛的规

则如下:根据每班4名同学踢毽子的个数总和的多少决出各班的排名,获得总和最高的为冠军队。 现请你计算:(1)每班4名同学踢毽子的个数总和;

(2)找出冠军队所在的班级;

(3)所有参赛同学平均踢毽子的个数;

(4)统计参赛同学中踢毽子的个数不小于平均踢毽子的个数的

人数。

【输入文件】 文件名:jianzi.in 文件中共有2*N+1行:

第一行:为班级的个数N(其中2<=N<=10);

之后的2*N行:每两行为一个班级的信息(包括:班级的名称及4名同学踢

毽子的个数。

【输出文件】 文件名:jianzi.out 文件中共有N+3行:

前N行:每行一个数值为各个班级4名同学踢毽子的个数总和; 第N+1行:只有一个名称为冠军队所在的班级;

第N+2行:只有一个数值为所有参赛同学平均踢毽子的个数,(要求:四舍

五入保留整数);

第N+3行:只有一个数值为统计踢毽子的个数不小于平均踢毽子的个数的

人数。

【要求】 每行的输出数据从第一列开始输出。 【样例输入】 jianzi.in的内容为: 3

1ban

30 20 25 13 (数值之间空一格) 2ban

26 17 34 30

6

3ban

25 19 30 16

【样例输出】 jianzi.out的内容为: 88 107 90

2ban 24 7 #include #include

using namespace std;

ifstream cin(\ofstream cout(\

int main(int argc, char *argv[]) {

char tming[100], ming[100]; int a[100] = {};

int z, s, t, bz, mb, p; int n, i, j, g; z = 0; s = 0; mb = 0; cin >> n;

for (i = 0; i < n; i++) {

bz = 0;

cin >> tming;

for (j = 1; j <= 4; j++) {

cin >> t;

a[i * 4 + j] = t; s += t; bz += t; }

cout << bz << endl; if (bz > mb) {

strcpy(ming, tming); mb = bz; } }

7

cout << ming << endl;

p = int(s * 1.0 / (n * 4) + 0.5); cout << p << endl; g = 0;

for (i = 1; i<= 4 * n; i++) if (a[i] >= p) g++;

cout << g << endl; //system(\ return EXIT_SUCCESS; }

六、密码翻译(题目名称:mima.bas/mima.c/mima.cpp) (100分)

【题目描述】 话说猴王的徒弟小猴在他的辅导之下修炼成仙,然而小猴仍然在努力修炼

中,现在的水平已超过猴王(这似乎不符合常理……)。但小猴绝不是白眼狼,不会凭着自己高强的法力与猴王斗争,反而他有了报恩的能力,他一直等待着机会的降临……

终于一天,一位强大的妖魔趁小猴外出的时候,夺走了猴王(一是因为他

法力还不够,二是因为他已经衰老),将猴王关进了妖洞,小猴回来得知后决定去营救师父。来到师父所在的妖洞外,发现妖洞安装了带有数字密码盘电子门。小猴略显神通,用魔法得知了此门的密码,是一个由字母组成的字符串,可是密码盘上只能输入数字啊,后经小猴再次魔法得知,妖魔有一套转换规则,将这个字符串中的大写字母提取出来,按照密码字典中字母和数字的对照表,将这些大写字母对应密码字典中的数字求和,将求和的结果作为密码。妖魔这套密码转换不算复杂吧?请你编写一个程序帮助小猴将他得到的字母串转换成能够打开妖洞的密码吧!

【输入文件】 文件名mima.in

第一行:只有一个正整数N,表示密码字符串中可能出现的不同大写字母的

个数,其中(1<=N<=26);

之后的2*N行:表示密码字典。每两行代表一个大写字母的信息:其中第

一行为一个大写字母,第二行为这个大写字母与之对应的正整数(不大于1000);

最后一行:为一个只含有字母的字符串(其长度不超过30)。 【输出文件】 文件名mima.out

文件中只含有一个自然数表示开门的密码(小于1000)。 【样例输入】 mima.in的内容为:

3

A 20 C 10 E 111

abAcEmnCAA

【样例输出】 mima.out的内容为 181

8

#include #include #include

using namespace std;

ifstream cin(\ofstream cout(\

int main(int argc, char *argv[]) {

int b[30] = {}; int n; char c; int t, l, h, i; char s[50]; cin >> n;

for (i = 1; i <= n; i++) {

cin >> c; cin >> t;

b[c - 'A' + 1] = t; }

cin >> s; l = strlen(s); h = 0;

for (i = 0; i < l; i++) {

if (s[i] >= 'A' && s[i] <= 'Z') {

h += b[s[i] - 'A' + 1]; } }

cout << h << endl; //system(\ return EXIT_SUCCESS; }

七、挑选队员(题目名称:duiyuan.bas/ duiyuan.c/ duiyuan.cpp) (100分)

【题目描述】 杨老师所教班级的M名学生都非常优秀,学习成绩差别不大,现在要选出不

少于N名学生参加一项夏令营活动,但以什么标准挑选让杨老师犯了难?为了体现公平,杨老师进行了一次综合测评,他希望找到的这些同学的测评成绩必须是相同的,而且越高越好,对同一测评分数的学生要么都选上,要么都不被选。假如得到的测评成绩一定能满足杨老师的要求,请你编写程序帮助杨老师计算按照上述规则能够挑选出多少名学生。

【输入文件】 文件名:duiyuan.in

9

文件中共有M+2行:

第一行:只有一个正整数M,表示参与测评的学生人数(其中2<=M<=100); 接下来的M行:每行一个正整数,表示M名学生的测评成绩(不超过100); 最后一行:包含一个正整数N,表示杨老师希望挑选的最少人数。 【输出文件】 文件名:duiyuan.out

包含一个正整数,表示杨老师实际挑选出来的队员人数。 【样例输入】 duiyuan.in的内容为: 8

98 94 94 96 91 92 91 91 2

【样例输出】 duiyuan.out的内容为: 2 #include #include #include

using namespace std;

ifstream cin(\ofstream cout(\

int main(int argc, char *argv[]) {

int b[105] = {}; int n;

int i, x, t; cin >> n;

for (i = 1; i <= n; i++) {

cin >> t; b[t]++; }

cin >> x;

for (i = 100; i >= 1; i--) {

if (b[i] >= x) {

cout << b[i] << endl; break;

10

} }

//system(\ return EXIT_SUCCESS; }

11

本文来源:https://www.bwwdw.com/article/lrlh.html

Top