美文网首页程序员机器学习与数据挖掘互联网科技
2007年北京市信息学奥林匹克竞赛小学组试题 (更新中)

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

作者: 海天一树X | 来源:发表于2018-05-31 09:38 被阅读57次

    建立文件夹

    请你在指定位置用自己的考号建立一个文件夹,并在这个文件夹中为本次竞赛的每个题目建立一个子文件夹,这些子文件夹的名字分别是: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;
    }
    

    相关文章

      网友评论

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

        本文链接:https://www.haomeiwen.com/subject/vfgfsftx.html