第12关 - 2018学年下DLOI小学GoC比赛

526.生日蛋糕 (cake) 2018DLOI小乙d

题目描述

小P班有一个传统项目,就是每个月都会为当月生日的小朋友搞集体的生日Party。当然Party上少不了要有蛋糕,而且有意思的是:他们规定有几个小朋友生日,蛋糕就做几层!!!小P别出心裁的想出了用GoC来设计一款自动计算当月生日蛋糕层数的程序,并画出这个巨型蛋糕。如下图所示:

image.png

这款蛋糕第一层宽50,后面每层比上一层加宽20,每层高度都是20,颜色呈黄、红两色交替,外形非常漂亮!

输入格式 第一行,两个整数N( 1 <= N <= 50)和X( 1 <= X <=12),N表示小P班的人数,X表示当月的月份。

第二行,有N个正整数,表示每个小朋友生日的月份。每个正整数的范围:[1,12]。

输出格式 求出小P班有多少个小朋友是第X月份的生日,并画出相应层数的蛋糕。

输入/输出例子1

输入:

10 2

2 5 4 2 2 5 2 12 2 2

输出:

image.png

题解

int main()
{
    int N,x,y,a;
    cin>>N>>x;
    y=0;
    for(int i=1;i<=N;i++)
    {        
        cin>>a;
        if(a==x) y++;
    }
    int r=50,c;
    p.up();
    for(int i=1;i<=y;i++)
    {
        if(i%2==1) c=5;
        if(i%2==0) c=1;
        p.rr(r,20,c);
        p.bk(20);
        r=r+20;
    }
    return 0;
}

527.坐船 (boat) 2018DLOI小乙d

题目描述

小P班组织周末去生态园拓展,生态园中有一条小河,必须坐船才能过去。河中有许多小船,船的最大载重量是W斤。只要不超重,小船可以允许多人乘载。但班主任想按学号的顺序依次上船,这样的话,小P班上需要按排几艘小船呢?班主任把这个任务交给了小P,小P想用程序画出结果来。

他的构想是:按一个高为20,船上的小朋友的总重量为宽画长方形表示一条小船,将班上所需的小船左对齐,间距为20均匀排列。

输入格式 第一行有两个正整数。一个整数N( 1 <= N <= 50),表示小P班上的人数。另一个整数W(200<=W<=400),表示船的最大载重量。

第二行有N个正整数,依次表示1~N号同学的体重wi斤(50<=wi<=150)。

提示:程序中如果需要做除法都是做整除运算。

输出格式 按要求画出若干个长方形,表示小P班需要的船数。

输入/输出例子1

输入:

10 300

65 50 80 85 120 95 85 55 75 120

输出:

image.png

题解

int main()
{
    int n,x;
    cin>>n>>x;
    int s=0;
    p.up();
    for(int i=1;i<=n;i++)
    {
        int a;
        cin>>a;
        if(s+a<=x) 
            s=s+a;
        else 
           {
              p.rt(90).fd(s/2).down().rr(s,20).up().bk(s/2).lt(90).bk(40);
              s=a;   
           }
    }
     if(s>0)  
         p.rt(90).fd(s/2).down().rr(s,20).up().bk(s/2).lt(90).bk(40);
    return 0;
}

522.智能手表 (watch)2018DLOI小乙d

题目描述

小P自从学习了GoC编程绘图后。很喜欢将观察的事物都用GoC编程画出来。今天小P就设计了一个帅气的智能手表,它由长为200,宽为30的长方形,和一个半径是30的实心圆构成,如下图所示:

image.png

提示:智能手表的颜色是蓝色(2号色)。

题解

int main()
{
    p.r(30,200).oo(30);
    return 0;
}

523.杠铃(bell)2018DLOI小乙d

题目描述

举重是小P最爱看的奥运会项目之一,因为中国的奥运健儿在这个项目上拥有决对的优势。小P打算为这个项目设计一个图标,并编写一个能画出不同重量级的举重杠铃。这个如下图所示:

image.png

这个杠铃的中间是一个长为200(2个红色椭圆的圆心距离)的直线连接,线的粗细为20,颜色是蓝色(2号色)。两头是一个宽为50,高为len的蓝色椭圆和一个宽为50,高为2*Len的红色(1号色)椭圆组成(提示蓝红两椭圆间距为50),而len代表着不同的重量级,例如上图,len=100,代表此图为50公斤重量级别。

输入格式 第一行,一个整数len(20<=len<=200),表示杠铃的重量级别。

输出格式 画出对应重量级的哑铃。

提示:红色是1号色。椭圆的宽、高是长、短半径的2倍。

输入/输出例子1

输入:

50

输出:

image.png

输入/输出例子2

输入:

120

输出:

image.png

题解

int main()
{
    int len;
    cin>>len;
    p.c(2).rt(90);
    p.size(20).hide();
    p.ee(25,len/2.0).fd(50).ee(25,len,1).fd(200).ee(25,len,1).fd(50).ee(25,len/2.0);
    return 0;
}

524.盒子与球 (box)2018DLOI小乙d

题目描述

数学课上,老师教小P计算周长,并给小P设计了一个问题:有一个盒子里刚好装了N个红色(1号色)的小球,小球的半径是20。那么这个盒子的周长是多少呢?小P觉得这个问题很有趣,决定设计一个程序,能画出这个装有N个小球的盒子。

输入格式 第一行,一个整数N。 1 <= N <= 20。

输出格式 画出装有N个小球的盒子。注意,先画盒子,再画里面的球。

输入/输出例子1

输入:

5

输出:

image.png

输入/输出例子2

输入:

8

输出:

image.png

题解

int main()
{
    int n,a,b;
    cin>>n;
    a=2*n*20,b=40;
    p.rt(90);
    for(int i=1;i<=2;i++)
    {
        p.fd(a).rt(90);
        p.fd(b).rt(90);
    }
    p.up().rt(90).fd(20).lt(90).fd(20);
    for(int i=1;i<=n;i++)
      p.oo(20,1).fd(40);    
    return 0;
}

525.挂灯笼(light)2018DLOI小乙d

题目描述

元旦将至,为了营造节日气氛,校园里挂起许多漂亮的彩色灯笼。小P感觉得这个场景特别美,就想要用GoC编程将它画出来。他想象的画面中是:在一根长度为Len的线粗细为3的直线上,均匀规律的挂着红、蓝、黑、红、蓝、黑、……的N个灯笼。例如:Len=200,N=7,画面如下图所示:

image.png

灯笼是一个长度为10的粗细为3的线上挂着一个横半径为10,竖半径为25的椭圆形。你能按小P的要求画出来吗?

输入格式 一行,两个整数: Len和N。 2 <= N <=10 , 100<= Len <= 300。

输出格式 相应的图形。

提示:灯笼要均匀分布,故间距要用实数。线的粗细是3,红色(1号色),蓝色(2号色),黑色(0号色)。

输入/输出例子1

输入:

150 4

输出:

image.png

题解

int main()
{
   int len,n,c;
    cin>>len>>n;
    double d=len*1.0/(n-1);
    p.rt(90).size(3).c(2);
    p.fd(len).bk(len).lt(90);
    for(int i=1;i<=n;i++)
    {
        p.bk(10).up().bk(25).down().ee(10,25,i%3).up().fd(25+10);
        p.rt(90).fd(d).down().lt(90);
    }
    return 0;
}