第1关 - 2020年南海区小学乙组比赛
5853.四个顶点三角形(程序填空)
题目描述
在四边形的四个顶点上,画完全对称的四个三角形。注:每条边的边长为100。
题解
int main(){
for (int i=0; i<4; i++)
{
p.fd(100);
p.lt(75);
for (int j=0; j<3; j++)
p.fd(100).rt(120);
p.rt(165);
}
p.hide();
return 0;
}
5359.彩色虚线
题目描述
用0、1、2号颜色,画下面彩色虚线。线段长度和空的间距长度都是20。
题解
int main(){
p.rt(90);
for(int i = 0 ; i < 9; i ++){
p.c(i%3).fd(20).up().fd(20).down();
}
return 0;
}
5360.齿轮
题目描述
键盘输入一个正整数n,画n个齿的齿轮。内圆半径80,每个齿由边长是20和40的实心矩形构成。例如n=5,画如下图:
输入格式
一个正整数。输出格式
画相应的齿轮。
输入/输出例子1
输入:
10
输出:
int main(){
p.o(80);
p.up();
p.picU(0);
int n;
cin >> n;
for(int i=0;i<n;i++)
p.fd(100).rr(20,40).bk(100).rt(360.0/n);
return 0;
}
5364.包装箱
题目描述 有5个圆形物品自下向上整齐堆放,希望有一个恰好能包住它们的矩形。请用goc画出示意图。例如5个圆的半径分别是30 20 50 40 10,将画出下面图形。
输入格式
5个正整数,代表从下到上的5个圆的半径。输出格式
画相应图形。
输入/输出例子1
输入:
30 10 20 50 8
输出:
题解
int main(){
int r,n= 5,maxW=0,H=0;
cinWin();
p.up();
while(n--){
cin >> r;
H += r*2;
if(maxW < 2*r) maxW = 2*r;
//p.text(maxW);
p.fd(r).o(r).fd(r);
}
p.bk(H /2).down().r(maxW,H);
return 0;
}
5815.最多边的多边形
题目描述
小C在农场看到有n个木条,有各种长度。他想挑出一些长度相等的木条摆放成一个正多半形,不过他希望这个正多边形有尽量多的边。请你帮助小C用goc编程画出示意图。
如n=8,8个木条的长度是:20、130、130、150、20、130、40、100。显然长度130的木条有3根,可以画边长130的正三角形,示意图如下:
输入格式
第一行1个正整数n,2<=n<=50。
第二行n个正整数(每个数不超过200),表示木条长度。输出格式
正确的图形。(数据保证只有一个解)
输入/输出例子1
输入:
7
80 200 80 80 200 80 80
输出:
题解
题目要求边数最多,所以我们可以使用“桶排序” 排序后,求出边数最多的木棍数量与长度。
int arr[205];
int main(){
cinWin();
int n,l,maxN=0,maxM = 0;
cin >> n;
// 循环赋值
while(n--){
cin >> l;
arr[l] ++;
}
//桶排序
for(int i = 1; i<= 200;i++){
if(arr[i] > maxN){
maxN = arr[i];
maxM = i;
}
}
// 画多边形
for(int i = 0;i < maxN; i++){
p.fd(maxM).rt(360.0/maxN);
}
return 0;
}
5816.多层梯形
题目描述
小C在农场的附近看到有n块长度不同的木板从下到上堆在一起,他想用那些长度大于20的木板作为梯形的下低或上底,堆成多个高度相同的等腰梯形,并且总高度是300,中心在同一垂直线上。请用goc编程画出示意图。
例如n=5,5个木板长度分别是200、10、100、150、80。小C去掉长度为10的木板,将从下到上堆成3个等腰梯形。第1个梯形是下底200上底100高100,第2个梯形是下底100上底150高100,第3个梯形是下底150上底80高100。示意图如下:
输入格式 第一行1个正整数n,2<=n<=50。
第二行n个正整数(不超过500),依次表示从下到上的木板长度,其中至少有2个数大于20。
输出格式 正确的图形。
输入/输出例子1
输入:
7
300 5 80 10 200 80 200
输出:
注:每个梯形高度是75.
题解
int arr[55];
int main(){
cinWin();
int n,cnt = 0,x;
cin >> n;
// 筛选出符合要求的木板
while(n--){
cin >> x;
if(x >20){
arr[cnt] = x;
cnt ++;
}
}
// cnt 块木板,总高为 300,求每两块木板间的距离
int h = 300.0 / (cnt -1);
for(int i = 0; i < cnt -1 ;i++){
double x1,x2,y1,y2;
x1 = arr[i] /2.0;
y1 = h*i;
x2 = arr[i+1] /2.0;
y2 = h*(i+1);
p.moveTo(x1,y1);
p.lineTo(-x1,y1);
p.lineTo(-x2,y2);
p.lineTo(x2,y2);
p.lineTo(x1,y1);
}
return 0;
}