题目描述
小明今天找了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; }