第3关 - 2019年南海区小学乙组比赛

image.png

625.圆和方(2019NHOI小乙)

题目描述

天圆地方,这是古老浪漫的传说。小C准备为学校六一儿童节画一个天圆地方的LOGO图,下面是小C的草图,请你使用goc编程在计算机上画出。

image.png

注:矩形边长200,颜色号10;圆半径80,颜色号4。

题解

int main(){
    
    p.rr(200,200,10).oo(80,4);
    return 0;
}

626.彩色线条(2019NHOI小乙)

题目描述

顺利完成了画天圆地方的LOGO图案,下一步小C想设计颜色周期变化的彩色线条。例如:输入线条数为20时,图形如下。

image.png

上面线段颜色的周期变化规律是:红(1号)、蓝(2号)、绿(3号)…;

下面线段颜色的周期变化规律是:黄(5号)、棕(6号)、紫(11号)、金(14号)…;

上、下每个线的长度各100(红色100,黄色100…),间距20。

输入格式 第一行1个整数n,表示输入的线条数。(2<=n<=20)

输出格式 正确的图形。

输入/输出例子1

输入:

12

输出:

image.png

题解

int main(){
    int n,col;
    cin >> n;
    for(int i = 0;i <n;i++){
        p.moveTo(i*20,0);
        p.c(i%3 + 1).fd(100).bk(100);
        
        if(i%4 == 0) col = 5;
        if(i%4 == 1) col = 6;
        if(i%4 == 2) col = 11;
        if(i%4 == 3) col = 14;
        
        p.c(col).bk(100).fd(100);
        
        
    }
    
    return 0;
}

627.传声(2019NHOI小乙)

题目描述

小C节日旅游来到一个农场。农场主John和n个奶牛站在一条水平线上。牛的传递消息是依靠“吼”,牛的吼叫声最远可以传递的距离是50。农场主John首先通知最左边的第一条奶牛(一定会通知到),然后奶牛就开始向后吼叫,后面的奶牛如果能听到(和前面吼叫的奶牛距离不超过50),就继续向后吼叫传递消息。

听到消息的奶牛用半径10的圆表示;如果有没有听到消息的奶牛,就用边长20的正方形表示。

输入格式 第一行1个整数n;(2<=n<=10)

第二行n个整数,空格隔开,表示每头奶牛距离最左边的John的距离,数值大小递增。

注意:不要使用坐标命令!颜色默认。

输出格式 正确的图形。

输入/输出例子1

输入:

7

60 100 120 150 250 260 290

输出:

image.png

题解

int main(){
    int n, a[15],t=0;    
    cin>>n;
    p.rt(90);
    cin>>a[1];
    p.oo(10);
    for(int i=2;i<=n;i++){
        cin>>a[i];
        if(a[i]-a[i-1]<=50&&t==0){
            p.fd (a[i]-a[i-1]).oo(10);
        }else{
            t=1;
            p.fd(a[i]-a[i-1]).rr(20,20);
            p.hide();
        }
    }
    return 0;
}

628.花边图案(2019NHOI小乙)

题目描述

小C在森林里发现了一些岩画,有一些大小不一的正方形花边图案。图案的边上是若干凸凹图形组成的,请你编写goc程序,在输入边上的需要多少凸凹后,就可以画出一个正方形的四周花边。例如输入2时,图案如下图,每边有2个凸形。

image.png

注:每小段长度为20,颜色号1。

输入格式 一行1个整数n,表示每边需要的凸形数。1<=n<=8

输出格式 正确的图形。

输入/输出例子1

输入:

5

输出:

image.png

题解

int main(){
    
    int n,m=4;
    cin >> n;
    p.c(1);
    while(m--){
        for(int i = 1; i<= n; i++){
            p.fd(20).rt(90).fd(20).rt(90);
            p.fd(20).lt(90).fd(20).lt(90);
        }
        p.rt(90).bk(20);
    }
    return 0;
}

630.电线杆(2019NHOI小乙)

题目描述

小C在农场的附近看到有n颗电线杆排成一行,相邻之间距离为20。它们高度可能不一样,但高度相同的电线杆顶端有电线连接。如下面示意图中,电线杆用粗细为6的垂直直线画,电线用粗细为2的水平直线画。给定每个电线杆的高度,请用goc编程画出示意图。比如:n=4, 高度为:100 50 50 100,示意图如下:

image.png

输入格式 第一行1个正整数n,2<=n<=15。

第二行n个正整数,依次表示从左到右的电线杆的高度。

输出格式 正确的图形。

输入/输出例子1

输入:

7

200 60 80 40 200 80 200

输出:

image.png

题解

int arr[20];

int main(){
    int n,m;
    cin >> n;
    p.size(6).hide();
    // 获取数据并绘制电线杆
    for(int i = 1; i<=n; i++){
        cin >> m;
        arr[i] = m;
        p.moveTo(i*20,0).fd(m).bk(m);
    }
    p.size(2);
    // 画电线
    for(int i = 1; i<= n; i++){
        // 遍历后面相同高度的电线杆
        for(int j = i+1; j <= n; j++){
            if(arr[j] == arr[i]){
                p.moveTo(i*20,arr[i]).lineTo(j*20,arr[j]);
            }
        }
    }


    return 0;
}

632.寻宝游戏(填空)(2019NHOI小乙)

题目描述 小C在山上发现了n个山洞组成的寻宝游戏,这些洞均匀的排成一圈,游戏的规则是,小C从第1个洞开始查找,然后顺时针每隔m个洞查找下一个山洞,可是这样的话有些山洞就可能永远都查找不到。比如:n =6,m=3有下面图形的1号到6号山洞,小C开始查找1号山洞,然后隔3个查找5号山洞,隔3个查找3号山洞、再隔3个查找1号山洞,隔3个查找5号山洞,…,

image.png

因此,只能查找到1号、3号和5号山洞,而2号、4号、6号永远查找不到。现在要求你编写程序,把可以查看到的山洞用红色(1号颜色)实心圆表示出来。例如:n=6,m=3时,结果如下。

image.png

注:圆的半径都为30,圆心到中心位置为200。

输入格式 第一行2个整数n,m;(2<=m<=20)

输出格式 正确的图形。

输入/输出例子1

输入:

5 3

输出:

image.png

输入/输出例子2

输入:

18 5

输出:

image.png

题解

int main(){
    int n,m,arr[100];
    cin >> n >>m;
    for(int i=1;i<=n;i++)//所有洞标记为没有查找
        arr[i]=0;
    int cc=1;
    for(int i=1;i<=n;i++){
        arr[cc]=1;
        cc=cc+m+1;
        if(cc>n) 
            cc= cc % n;
    }

    for(int i=1;i<=n;i++){
        p.up().fd(200).down();
        if(arr[i]==0)
            p.o(30);
        if( arr[i]==1 )
            p.oo(30,1);
        p.up().bk(200).down();
        p.rt(360.0/n);
    }
    return 0;
}