程序员机器学习与数据挖掘互联网科技

2007年北京市信息学奥林匹克竞赛小学组试题 (更新中)

2018-05-31  本文已影响57人  海天一树X

建立文件夹

请你在指定位置用自己的考号建立一个文件夹,并在这个文件夹中为本次竞赛的每个题目建立一个子文件夹,这些子文件夹的名字分别是:CHANGE 、FAST、QUEUE、HOME、ORCHARD。每建立一个正确的文件夹可以得到2分。本部分共12分(包括考号文件夹)

提交答案时,请将每个题目的程序分别放入各自的文件夹中,放在其它位置不计分。本次竞赛每个题目有10个测试点,每个测试点2分,每个题满分20分。本次竞赛满分112分

一、单位换算:CHANGE.BAS

【问题描述】
目前最常用的长度单位有英制(例如英里、英寸)和公制(例如公里、米)两种。你肯定对公制的单位更熟悉一些。英制的长度单位其实也是经常会遇到的。比如,你听大人们说:“这辆自行车是二八的……”这句话的意思其实就是指那辆自行车的轮子的直径是28英寸。

已知1英寸=25.4毫米,请你写出一个方便的小工具,可以将英寸数换算成厘米数。

【输入文件】
文件名:CHANGE.IN(文件中只有一个整数,表示英寸数,已知这个数字不超过10000000。)

【输出文件】
文件名:CHANGE.OUT(文件中只有一个整数,表示相应的厘米数,由精确数四舍五入得来。)

【样例输入】
28

【样例输出】
71

二、谁是跑得最快的兔子:FAST.BAS

【问题描述】
几只兔子正在讨论谁跑得最快的问题。一个说:“我跑10米只用了4秒钟!够快吧?”另一个说:“我跑17米才用 6秒还是我快!”旁边的一个说话了:“上次,有只狼赶我,我跑100米也只用了22秒钟!就是这样你一句我一句地争个不停,可是,谁也说服不了谁。

一只灰兔说:“你们都别争啦。这样,把你们的名字和最好纪录都告诉我,我输入电脑,一下子就知道谁是最快的了。”然后,她就写了一个可以完成这个功能的程序...

作为一个出色的小学生,你是不是也可以完成这个程序呢?不要输给灰免啊...

【输入文件】
文件名:FAST.IN
文件第一行是一个整数n(1<=n<=100),表示参与讨论的兔子个数。
后面3n行,每3行是一只兔子的信息,分别是:
名字(字符串,长度不超过10个字符);
最好纪录的长度(整数,以米做单位,不超过1000);
最好纪录的时间(整数,以秒做单位,不超过1000)。

【输出文件】
文件名:FAST.OUT
文件中只有一个字符串,就是跑得最快的那只兔子的名字。
数据保证可以选出最快的唯一一只兔子。

【样例输入】
3
Nikki
10
4
Snoy
17
6
Pimi
120
22

【样例输出】
Pimi

三、排队:QUEUE.BAS

【问题描述】
婷婷是一个喜欢跳舞的女孩儿,还报了一个专门学习跳舞的班呢。在入学的时候,老师让大家根据自己的身高排了一下队,个子小的同学排前面,的同学,先后顺序随意。如果给你这些同学的身高数据,你能计算一下婷婷最前可以排第几、最后可以排第几么?

【输入文件】
文件名:QUEUE.IN
文件第一行是一个整数n(1<=n<=30),表示跳舞班所有同学的人数。
第二行是n整数,表示所有同学的身高,以厘米为单位。这Nwh 同学的数据,包括婷婷本人的。
第三行是一个整数,表示婷婷的身高。

【输出文件】
文件名:QUEUE.OUT
文件中只有两个整数,用空格分开。分别表求:从前面数,婷婷可能排的最前的位置和最后的位置。

【样例输入】
8
133 134 132 133 131 130 138 133
133

【样例输出】
4 6

四、温馨的家:HOME.BAS

【问题描述】
企鹅皮皮从小就是一个淘气的孩子。现在,他已经长套子,需要自己建一个新家了。你知道企鹅的家里用小石块在地面上铺出来的吧?为了让自己的家看起来更漂亮,皮皮找了很多钟不同颜色的石块,并把它们铺成一圈一圈的:先找某种颜色的一颗放中心,在它周围铺上一圈第二种颜色的,再在周围铺上一圈第三种颜色的...当然这是一个漂亮的家。

你能用你的知识,让计算机画出皮皮的家吗?

【输入文件】
文件名:HOME.IN
文件中只有一个整数整数n(1<=n<=26),表示皮皮的家是由多少圈石块组成的。

【输出文件】
文件名:HOME.OUT
就是皮皮家的示意思。用字母“A”表示第一种颜色的石块,用字母“B”表示第二种颜色的石块...以此类推。

【样例输入】
4

【样例输出】
DDDDDDD
DCCCCCD
DCBBBCD
DCBABCD
DCBBBCD
DCCCCCD
DDDDDDD

五、我家的果园有多大:ORCHARD.BAS

【问题描述】
我家的果园是一个不规则的形状,如下图所示:

orchard

它的北边界和南边界是标准的东西走向直线,其中北边界长为m米,南边界长为n米。但东西边界是相当不规则的,由一些向南和向东的线段交替组成。如果给出所有这些线段的长度,你能计算一下,我家果园的面积有多大吗?

【输入文件】
文件名:ORCHARD.IN
文件第一行是两个整数m、n,表示北、南边界的长度,以米为单位。
第二行是一个整数P(1<=P<=21),表示西边界由多少条线段组成(比如上图中,这个数字就是7,显然的,P一定为奇数)
第三行为P个整数,按从上到下的顺序依次给出西边界每条线段的长度,以米为单位。
第四行是一个整数q(1<=q<=21),表示东边界由多少条线段组成(比如上图中,这个数字是5,q也一定为奇数),第五行为q个整数,按从上到下的顺序依次给出东边界每条线段的长度,以米为单位。

【输出文件】
文件名:ORCHARD.OUT
文件中只有一个整数,表示我家果园的面积,以平方米为单位。

【样例输入】
16
5
3 13 3 3
3
18 2 2

【样例输出】
347

解答

一、解答

(一)分析

C++输入输出数据有两种方式,要牢牢掌握:
(1)从控制台输入用cin,输出用cout,需要包含头文件iostream;
从控制台输入用scanf,输出用printf,需要包含头文件cstdio
(2)从文件输入用fin,输出用fout,需要包含头文件fstream(这里f代表file)

注意,若使用苹果机的Xcode编写C/C++程序,文件相关的操作可参考:
XCode从文件读取数据&向文件写入数据的方法

四舍五入用round()函数,声明在cmath中。

编写程序之前要在工程目录下创建CHAGE.IN文件,CHANGE.IN包含了一个数字,比如“28”
CHANGE.OUT文件可创建可不创建,若不创建运行程序后会自动创建,并且程序会将答案写入这个文件

(二)程序

#include <fstream>
#include <cmath>

using namespace std;

int main()
{
    ifstream fin("CHANGE.IN");
    ofstream fout("CHANGE.OUT");

    int a;
    fin >> a;
    fout << round(a * 2.54) << endl;

    return 0;
}

二、解答

#include <fstream>
#include <cmath>
using namespace std;

string name[100];   // 兔子的名字
int len[100];       // 距离
int time[100];      // 时间
float v[100];       // 速度

int main()
{
    ifstream fin("FAST.IN");
    ofstream fout("FAST.OUT");

    int lineNum = -1;   // 行号
    int n = 0;

    while(!fin.eof())
    {
        lineNum++;
        if(0 == lineNum)
        {
            fin >> n;
        }
        else
        {
            int i = (lineNum - 2) / 3;
            if(0 == (lineNum - 2) % 3)
            {
                fin >> name[i];
            }
            else if(1 == (lineNum - 2) % 3)
            {
                fin >> len[i];
            }
            else if(2 == (lineNum - 2) % 3)
            {
                fin >> time[i];
                v[i] = (float)len[i] / time[i];
            }
        }
    }

    int maxV = 0;
    string winner;
    for(int i = 0; i < n; i++)
    {
        if(v[i] > maxV)
        {
            maxV = v[i];
            winner = name[i];
        }
    }

    fout << winner << endl;

    return 0;
}
上一篇下一篇

猜你喜欢

热点阅读