第 4 关 2019四年级下乙组比赛(DL)
轴对称(2019DL)
题目描述
小Q用一张纸对折后,在纸的一边画了一个边长为100的正三角形,在纸的另一边沿纸上的痕迹画图。展开后得到的是一个以折线为轴的对称图形。 如下图。你能把它用程序画出来吗?颜色为默认色,长度如图所示。
题解
对于需要抬笔才能完成的图形建议使用moveTo() 更简便,使用 setAngle() 可以快速恢复面向的方向
int main(){
p.moveTo(-120,0);
p.fd(100).rt(120).fd(100).rt(120).fd(100).rt(120);
p.moveTo(120,0).setAngle(0);
p.fd(100).lt(120).fd(100).lt(120).fd(100).lt(120);
p.moveTo(0,0).setAngle(0).fd(200);
return 0;
}
恒温杯垫(2019DL)
题目描述
天气渐冷,小Q妈妈为他准备的加热杯垫还真的好用,早晨起床先把牛奶或酸奶倒一杯放在加热垫,然后刷牙洗脸,正好温温的一杯牛奶,就可以美美的享用了。
但是这个加热杯垫也有一个小缺点,就是不能显示温度。这样就不能准确判断,杯中的温度是否刚好适合。于是,小Q决定设计一个根据杯垫温度,改变杯垫的颜色的程序。
功能如下:
- 当杯垫检测的温度大于55°C时,杯垫显示红色。
- 当杯垫检测的温度在50°C到55°C之间(包含50和55)时,杯垫显示绿色。
- 当杯垫检测的温度小于50°C时,杯垫显示黑色。
- 现在给出杯垫温度,请你编程画出相应的图形。
提示:
杯垫是一个宽为120,高100的长方形。中间显示有“55°C ”的提醒字样。你可以使用命令“p.text(“55°C”);”显示文字。
输入格式 输入只有一个整数,表示杯垫温度a。
输出格式 画出相应的图形。
输入/输出例子1
输入:
62
输出:
输入/输出例子2
输入:
52
输出:
题解
int main(){
int col,n ;
cin >> n;
if(n > 55) col = 1;
else if(n < 50) col = 0;
else col = 3;
p.rr(120,100,col).text("55°C");
return 0;
}
圆内圆(2019DL)
题目描述
数学课上,老师教了小Q用圆规画圆。聪明的小Q设计了一个圆内有圆的图形。如下图所示,它是由三个圆心在同一直线上的圆构成,两个白色(15号色)圆的直径之和等于绿色(3号色)的大圆。现在已知两个白色圆的直径为d和D。请你编程画出相应的图形。
输入格式 输入两个数据,即两个白色圆的直径d和D。
【数据范围】
0<=d,D<=300。
输出格式 画出相应的图形。
输入/输出例子1
输入:
70 120
输出:
题解
int main(){
int d,D,r;
cin >> d >> D;
d /= 2;
D /= 2;
r = d + D;
p.oo(r,3).up();
p.fd(r).bk(d).oo(d,15);
p.bk(d+D).oo(D,15);
return 0;
}
旋转的弹珠(2019DL)
题目描述
在一个环形轨道上内嵌了四种颜色的弹珠,它们均匀的分布在轨道内,如图所示。当开启按钮,四个弹珠会以10度/秒的速度顺时针围绕环形轨道上旋转。
该轨道外圆半径是140,弹珠的半径是20。四个弹珠的颜色分别是黑(0号色)、红(1号色)、蓝(2号色)、绿(3号色)。
请你编程画出k 秒后每个弹珠在环形轨道上的位置。
输入格式 第一行有一个整数 K。
【数据范围】
0<=K<=1000。
输出格式 请你编程画出k 秒后每个弹珠在环形轨道上的位置。
输入/输出例子1
输入:
9
输出:
题解
int main(){
p.o(140).o(100).hide().up();
int k,n= 4;
cin >> k;
k = k*10 % 360;
p.rt(k);
for(int i = 0; i < 4; i++){
p.fd(120).oo(20,i).bk(120).rt(90);
}
return 0;
}
翻硬币(2019DL)
题目描述
小 Q 面前的桌子上有N个硬币,有些正面朝上,有些反面朝上。现在他将x至y连续一段的硬币翻转一面,请问这N个硬币中有多少个硬币正面朝上?
假设我们用半径为10的橙色(13号色)实心圆表示硬币正面,用半径为10的灰色(8号色)实心圆表示硬币反面。请编程画出翻转后每个硬币的状态。
输入格式 第一行一个整数N,表示桌子上有 N 个硬币。
第二行为 N个0和1,表示硬币 i的状态。其中0表示正面,1表示反面。
第三行为两个整数x和y(x<=y),表示x至y连续一段需要翻转。
输出格式 请编程画出翻转后每个硬币的状态。
输入/输出例子1
输入:
8
1 0 0 1 1 0 1 0
4 7
输出:
题解
goc 中 三目运算不能使用,所以只能用if…else…
int arr[105];
int main(){
int n,col;
cin >> n;
// 初始化硬件
for(int i = 1;i<= n;i++) {
cin >> arr[i];
}
int x,y;
cin >> x >> y;
// 翻转硬币
for(int i = x; i <= y; i++){
arr[i] = ! arr[i];
}
p.rt(90).up();
// 取值显示
for(int i = 1;i <= n ; i++){
if(arr[i]){
col = 8;
}else{
col = 13;
}
p.fd(20).oo(10,col);
}
return 0;
}
益智游戏(2019DL)
题目描述】
小 Q一直在玩的一款益智游戏如下:已知三角形每边中间的三个数,请根据三角形三条边上的数,计算出三角形三个角上的数,使得每边之和为15。
例如:按顺时针方向,三角形三条边上的数为2,6,9 时:
提示:它是一个边长为200的正三角形,边和角上均匀分布了六个半径为20的圆形。图形中数字和边都是黑色(0号色),圆的底色的色号是圆中的数字。例如:数字为2的圆,底色为2号色。 数字为9的圆,底色为9号色。
请根据三角形三条边上的数,编程画出对应的图形。
输入格式 第一行有三个正整数a,b,c ,表示分别按顺时针方向,依次给出三角形三条边上的数。
(测试的输入数据保证有答案)
输出格式 请编程画出对应的图形。
输入/输出例子1
输入:
2 6 9
输出:
题解
由图中推导可知,左下角顶点计算公式
a = (15 + y - x -z) / 2;
int main(){
cinWin();
int x , y, z,a,b,c;
cin >> x >> y >> z;
// 两条边相加,去除底下两个洞,去除两边的洞,
// 顶点的洞被计算两次
a = (15 + y - x -z) / 2;
b = 15 - a - x;
c = 15 - a - z;
cout << a << " " << b << " " << c;
p.c(0).rt(30)
.fd(200).rt(120)
.fd(200).rt(120)
.fd(200).rt(120);
p.up();
p.oo(20,a).o(20).text(a).fd(100);
p.oo(20,x).o(20).text(x).fd(100).rt(120);
p.oo(20,b).o(20).text(b).fd(100);
p.oo(20,y).o(20).text(y).fd(100).rt(120);
p.oo(20,c).o(20).text(c).fd(100);
p.oo(20,z).o(20).text(z);
return 0;
}