第6关 - 2017DLOI小乙
147.(2017dloi小乙)第1题:椅子(chair)
题目描述
母亲节快到了,小C的妹妹刚学会画画,她设计了一张椅子送给妈妈。设计的椅子如下图,请你帮忙使用GoC编程绘制。
说明: 上图中红色数字是标明尺寸的,不需要画出。 总宽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
输出:
输入/输出例子2
输入:
6 9 11
输出:
输入/输出例子3
输入:
12 7 14
输出:
题解
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。如下图:
妹妹喜欢的糖果颜色为:2 3 5 2 1。如下图:
输入格式 一行10个空格分隔开的正整数:分别表示10颗糖的颜色编号。
输出格式 一行,横向排列所有符合条件的实心圆。 (注意:圆与圆之间没有空隙,每个圆的半径都是20,颜色为相对应的颜色编号)。
输入/输出例子1
输入:
5 12 6 3 8 11 13 14 1 11
输出:
输入/输出例子2
输入:
14 2 1 14 13 12 1 8 10 10
输出:
题解
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
输出:
###输入/输出例子2 输入:
50 30 45 90 86 100 64 73 100 50
输出:
题解
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
输出:
输入/输出例子2
输入:
20 300
23 21 12 9 8 2 3 1 2 15 11 26 32 14 25 15 18 25 32 56
输出:
题解
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)的方块,方块从上到下,从左到右编号。
现在要求把第n块的里面画个实心的绿色(3号)方块,其他的用空心正方形表示。具体参考样例。
输入格式 一行1个正整数n。
输出格式 相应图形
输入/输出例子1
输入:
3
输出:
输入/输出例子2
输入:
30
输出:
题解
使用用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;
}