第6关 - 2017DLOI小乙

image.png

147.(2017dloi小乙)第1题:椅子(chair)

题目描述

母亲节快到了,小C的妹妹刚学会画画,她设计了一张椅子送给妈妈。设计的椅子如下图,请你帮忙使用GoC编程绘制。

image.png

说明: 上图中红色数字是标明尺寸的,不需要画出。 总宽30,总高100,椅脚高50,两个角都是直角。

题解

int main(){
    
    p.fd(50).
        lt(90).fd(30).
        rt(90).fd(50).
        bk(100);
    
    return 0;
}

148.(2017dloi小乙)第2题:霓虹灯(light)

题目描述

为了庆祝母亲节,小C准备把家里许多不同颜色的灯管,拼成“霓虹灯”装饰客厅。这些灯管的长度都是100,每个“霓虹灯”都由两种不同颜色的N个灯管拼成,它们按顺时针的顺序依次排列成一圈,每两条灯管之间的角度一样。(见输入输出样例)。 为了研究什么数量、颜色的灯管拼成的霓虹灯更好看,请你帮小C编制一个通用的程序:键盘输入数量N、第1种灯管的颜色a,第2种灯管的颜色b,就可以画出相应的霓虹灯。

输入格式 一行3个空格分隔开的正整数N,a,b:分别表示灯管的数量、第1种灯管的颜色、第2种灯管颜色。

输出格式 相应的霓虹灯图。

输入/输出例子1

输入:

3 1 2

输出:

image.png

输入/输出例子2

输入:

6 9 11

输出:

image.png

输入/输出例子3

输入:

12 7 14

输出:

image.png

题解

int main(){
    int n,a,b;
    cin >> n >> a >> b;
    for(int i=0; i< n;i++){
        if(i%2==0) p.c(a);
        if(i%2==1) p.c(b);
        p.fd(100).bk(100).rt(360.0/n);
    }
    
    
    return 0;
}

149.(2017dloi小乙)第3题:糖果(candy)

题目描述

妈妈收到小C和妹妹的礼物后很感动,奖励10颗水果糖给他们,糖果的半径都是20。小C知道妹妹只喜欢吃颜色编号为0-9号的水果糖,他马上挑出妹妹喜欢吃的糖分给妹妹吃。 请你帮小C编写一个通用的程序,帮助小C快速地挑出妹妹喜欢吃的糖:从键盘读入10颗糖的颜色编号,然后把小C妹妹喜欢吃的糖果按顺序:用20作半径、相应的颜色编号画实心圆。

比如:10颗水果糖的颜色编号分别为:2 3 12 5 14 10 11 2 1 13。如下图:

image.png

妹妹喜欢的糖果颜色为:2 3 5 2 1。如下图:

image.png

输入格式 一行10个空格分隔开的正整数:分别表示10颗糖的颜色编号。

输出格式 一行,横向排列所有符合条件的实心圆。 (注意:圆与圆之间没有空隙,每个圆的半径都是20,颜色为相对应的颜色编号)。

输入/输出例子1

输入:

5 12 6 3 8 11 13 14 1 11

输出:

image.png

输入/输出例子2

输入:

14 2 1 14 13 12 1 8 10 10

输出:

image.png

题解

int main(){
    int n=10,x;
    p.rt(90).up();
    while(n--){
        cin >> x;
        if(x <10){
            p.oo(20,x).fd(40);
        }
    }
    
    return 0;
}

150.(2017dloi小乙)第4题 小球(ball)

题目描述

小C家里有10个小球,他们的半径为R,小C想找出最小的小球,你能帮他编一个程序吗?

输入格式 一行10个空格分隔开的正整数:分别表示10个小球的半径R。 R范围[10,100]

输出格式 用最小的小球半径R,画一个红色(颜色编号是1)的实心圆。

输入/输出例子1

输入:

100 90 70 60 80 95 20 10 95

输出:

image.png

###输入/输出例子2 输入:

50 30 45 90 86 100 64 73 100 50

输出:

image.png

题解

int main(){
    int n=10,x,minN=10000;
    while(n--){
        cin >> x;
        if(minN > x) minN = x;
    }
    p.oo(minN,1);
    
    
    return 0;
}

151.(2017dloi小乙)第5题 巧克力甜度(sweet)

题目描述

妈妈买了n颗甜度不同的巧克力,规定小C只能吃最大甜度之和是S。 例如:有5颗巧克力,s=6,每个的甜度分别为: 4 2 3 1 1,那么小C最多可以吃3颗。 请问你能帮小C计算一下最多能吃多少颗巧克力吗?

输入格式 第一行2个正整数N,S。 N:表示巧克力的个数,范围在[1,50]。S:表示小C能吃的最大甜度之和。 第二行,N个正整数,表示每个巧克力的甜度,范围在[1,100]。

输出格式 用一个实心正方形表示小C最多能吃巧克力的颗数。(注意:正方形的边长=最多吃的巧克力颗数*5)

输入/输出例子1

输入:

5 28

50 45 23 2 6

输出:

image.png

输入/输出例子2

输入:

20 300

23 21 12 9 8 2 3 1 2 15 11 26 32 14 25 15 18 25 32 56

输出:

image.png

题解

int main(){
    int n,s,arr[55],minA = 105;
    cin >> n >> s;
    pen.hide();
    for(int i = 1; i <= n;i++){
        cin >> arr[i];
    }
    
    int tmp;
    // 冒泡排序
    for(int i=0; i<n;i++){
        for(int j=i+1;j<n;j++){
            if(arr[j] < arr[i]){
                tmp = arr[i];
                arr[i] = arr[j];
                arr[j] = tmp;
            }
        }
    }
    
    int ans = 0;
    for(int i = 1; i<= n;i++){
        if(s >= arr[i]){
            ans ++;
            s -= arr[i];
        }
    }
    
    p.rr(ans*5,ans*5,2);
    
    
    return 0;
}

152.(2017dloi小乙)第6题 金字塔形(trigon)

题目描述

10层金字塔形如下,共55个橘黄色(14号)小正方形(边长30)的方块,方块从上到下,从左到右编号。

image.png

现在要求把第n块的里面画个实心的绿色(3号)方块,其他的用空心正方形表示。具体参考样例。

输入格式 一行1个正整数n。

输出格式 相应图形

输入/输出例子1

输入:

3

输出:

image.png

输入/输出例子2

输入:

30

输出:

image.png

题解

使用用moveTo() 快速绘制金字塔。

int main(){
    int n;
    cin >> n;
    p.c(14).rt(90).up().hide();
    for(int i=1;i<=10;i++){
        // 偏移半个方块 15 步长
        p.moveTo(0-i*15,300-i*30);
        for(int j=0;j<i;j++){
            n--;
            if(n==0){
                p.rr(30,30,3);
            }
            p.r(30,30).fd(30);
        }
    }
    
    return 0;
}