第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;  
}