2013年海淀区中小学生信息学奥林匹克竞赛小学组竞赛试题(每题100分,共700分)姓名________年级______学校_________准考号________成绩__________说明:(1)请同学们运行QBASIC语言环境(BC7.0版本)或C语言环境;(2)以各自题目的名称,例如:shulie.bas/或shulie.c/或shulie.cpp,将源文件存盘;(3)建立文件读写,将最后写好的源文件,存入D:\TEST文件夹中。
如:D:\TESTfeiyong.basshulie.bastuxing.baspfang.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 <cstdlib>#include <fstream>using namespace std;ifstream cin("feiyong.in");ofstream cout("feiyong.out");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("PAUSE");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的内容为:3591523334559192#include <cstdlib>#include <fstream>using namespace std;ifstream cin("shulie.in");ofstream cout("shulie.out");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("PAUSE");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 DCD DCBCD DCBABCDDCBABCD DCBCD DCD D#include <cstdlib>#include <fstream>using namespace std;ifstream cin("tuxing.in");ofstream cout("tuxing.out");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("PAUSE");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<N≤9999)。
【输出文件】文件名:pfang.out文件中共有若干行:前若干行:每行一个数,为满足上述条件的数值;最后一行:只有一个数,为满足上述条件的数值的个数。
【要求】每一行的数据都从第一列开始输出。
【输入样例】 pfang.in的内容为:1000 4000(两个数据之间空一格)【输出样例】 pfang.out的内容为:1444270433643#include <cstdlib>#include <fstream>using namespace std;ifstream cin("pfang.in");ofstream cout("pfang.out");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){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("PAUSE");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行:只有一个数值为统计踢毽子的个数不小于平均踢毽子的个数的人数。