题目描述
小明今天找了n跟木柴,但是木柴太多了,小明只能拿走m根木柴,小明希望拿走的木柴都是剩下的木柴中最长的,小明还画出以下图形
例如 输入
5 3
10 20 30 40 50
小明要拿走30 40 50 这3根木柴
从大到小画出以下图形
矩形的宽是20,矩形的高就是木柴的长度,两根木柴的距离是20,色号2,先移动到(-350,-350)再画图。
输入格式
第一行两个正整数n和m,分别表示小明找到n跟木柴,和要拿走m跟木柴,范围是 1<=m<=n<100;
第二行n个正整数,分别表示不同木柴的长度,范围是【10,500】;输出格式
相应的图形。
输入/输出例子1
输入:
5 2
80 40 60 20 100输出:
样例解释
小明拿走了长度是100 和 80的木柴
解题思路
本题主要考察的是排序算法,因为题目中要把最高的m个矩形从高到矮画出来。
我们目前常用的是冒泡排序算法。
冒泡排序写法
写法1
for(int i=1;i<=n;i++) { for(int j=i+1;j<=n;j++) { if(a[j]>a[i]) { int t=a[i]; a[i]=a[j]; a[j]=t; } } }
写法2
for(int i=1;i<n;i++) { for(int j=n;j>i;j--) { if(a[j]>a[j-1]) { int t=a[j]; a[j]=a[j-1]; a[j-1]=a[j]; } } }
教程上的排序算法:选择排序的写法
for(int i=1;i<n;i++) { m=i; for(int j=i+1;i<=n;j++) { if(a[m]>a[j])m=j; } t=a[i]; a[i]=a[m]; a[m]=t; }
参考答案
int main() { int n,m,a[101]; cin>>n>>m; for(int i=1;i<=n;i++) { cin>>a[i]; } for(int i=1;i<n;i++)//冒泡排序 { bool f=false; for(int j=n;j>i;j--) { if(a[j]>a[j-1]) { int t=a[j]; a[j]=a[j-1]; a[j-1]=t; f=true; } } if(f==false)break; } pen.up().moveTo(-350,-350).speed(10); for(int i=1;i<=m;i++) { pen.fd(a[i]/2.0).rr(20,a[i]).bk(a[i]/2.0); pen.rt(90).fd(40).lt(90); } return 0; }