WebGoC题解(13) 狐猬编程:GoC L4 结业测试 第4题 找木柴

题目描述

小明今天找了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;
}
相关推荐
To_OC8 小时前
LC 128 最长连续序列:别上来就排序,O (n) 解法才是这题的灵魂
javascript·算法·leetcode
05Kevin1 天前
lk每日冒险题--数据结构6.27
算法
To_OC1 天前
从一次栈溢出报错说起,我把递归彻底扒明白了
javascript·算法·程序员
千纸鹤安安2 天前
千问Qwen-AgentWorld来了:一个语言模型搞定七大Agent场景,GPT-5.4都输了
算法
七牛开发者2 天前
MCP 到底是什么?为什么 Agent 都想接上它
算法·aigc·agent
北域码匠2 天前
冒泡排序太慢?鸡尾酒排序双向优化,原生 C# 零第三方库完整代码
数据结构·排序算法·泛型·c# 算法·鸡尾酒排序·原生 c# 开发·冒泡排序优化·嵌入式算法
卷无止境2 天前
C++ 的Eigen 库全解析
c++