C++实现蓝桥杯竞赛题目—搭积木

C++实现蓝桥杯竞赛题目---搭积木的完整攻略

题目描述

假设你们班有很多童鞋正在参加蓝桥杯竞赛,老师突然想了个好玩的游戏:大家一起来玩搭积木,规则如下:每个学生手里都有 $n$ 个积木,编写程序按照如下规则输出:

  • 第一行输出所有积木的高度和;
  • 第二行将所有积木按高度升序输出;
  • 第三行将所有积木按高度降序输出;
  • 第四行随机输出所有积木。

程序实现

首先,因为题目需要输入不定量的积木,我们可以利用 vector 动态存放积木高度:

#include <iostream>
#include <vector>
#include <algorithm>
#include <ctime>
using namespace std;

int main()
{
    vector<int> blocks;

    // 获取积木数量
    int n;
    cin >> n;

    // 存放积木高度
    for (int i = 0; i < n; i++)
    {
        int height;
        cin >> height;
        blocks.push_back(height);
    }

    // 所有积木高度和
    int sum = 0;
    for (int i = 0; i < n; i++)
    {
        sum += blocks[i];
    }
    cout << sum << endl;

    // 按高度升序输出
    sort(blocks.begin(), blocks.end());
    for (int i = 0; i < n; i++)
    {
        cout << blocks[i] << " ";
    }
    cout << endl;

    // 按高度降序输出
    sort(blocks.rbegin(), blocks.rend());
    for (int i = 0; i < n; i++)
    {
        cout << blocks[i] << " ";
    }
    cout << endl;

    // 随机输出
    srand((unsigned int)time(NULL));
    random_shuffle(blocks.begin(), blocks.end());
    for (int i = 0; i < n; i++)
    {
        cout << blocks[i] << " ";
    }
    cout << endl;

    return 0;
}

代码中用到的各种函数的意思如下:

  • vector 是 C++ 中的一种容器,可以动态存放若干个元素;
  • sort 是 C++ 中的排序函数,用于对指定区间内的元素进行排序;
  • srand 是用于设置随机数发生器的种子;
  • random_shuffle 是 C++ 中用于随机重排指定区域内元素顺序的函数。

示例说明

示例1:

输入:

5
3 2 1 4 5

输出:

15
1 2 3 4 5
5 4 3 2 1
4 1 2 5 3

上述代码满足题目要求,可以通过本题。

示例2:

输入:

8
9 7 3 5 4 2 8 1

输出:

39
1 2 3 4 5 7 8 9
9 8 7 5 4 3 2 1
5 8 7 2 3 9 1 4

同样可以通过本题。

总结

本题主要考察的是实现基本算法的能力,以及合理使用 C++ 容器和标准函数库的能力。对于像积木这种需要存储数量不定的数据,我们可以使用 vector 来方便地实现。对于排序和随机重排操作,可以使用标准函数 sortrandom_shuffle 来完成。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++实现蓝桥杯竞赛题目—搭积木 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • C语言实现通讯录的详细代码

    下面我将为您详细讲解“C语言实现通讯录的详细代码”的完整攻略: 一、需求分析1. 该通讯录需要实现的基本功能有添加联系人、删除联系人、查找联系人、修改联系人信息以及显示通讯录中所有联系人信息。2. 联系人信息需要包含姓名、电话号码、电子邮箱等信息。3. 联系人信息需要存储在文件中,以便程序重启后能够读取之前保存的联系人信息。 二、程序设计1. 定义联系人结构…

    C 2023年5月23日
    00
  • C语言实现班级成绩管理系统

    C语言实现班级成绩管理系统 系统设计 班级成绩管理系统需要实现的功能包括学生信息的录入、成绩的录入、成绩的查询等,因此我们需要设计以下的数据结构: 学生信息 我们需要记录每个学生的学号、姓名和班级信息,因此我们可以使用如下的结构体定义: typedef struct student { char id[20]; char name[20]; char cla…

    C 2023年5月23日
    00
  • C语言实现学生消费管理系统

    【C语言实现学生消费管理系统攻略】 一、需求分析 对于学生来说,管理自己的消费是很有必要的。因此我们需要实现一款学生消费管理系统,具备以下功能: 学生信息管理:包括姓名、学号、性别等信息。 消费信息管理:包括日期、消费品种(如食物、书籍等)、消费金额等信息。 消费查询功能:能够查询某一段时间内的消费情况。 统计分析功能:能够统计学生的消费情况,如消费总额、平…

    C 2023年5月23日
    00
  • 在C语言中向链接列表添加节点

    下面是在C语言中向链接列表添加节点的完整使用攻略。 什么是链接列表 链接列表(Linked List)是由多个节点组成的数据结构,每个节点包含一个数据元素和指向下一个节点的指针。 链接列表的优点是可以高效地插入和删除节点,而且不需要预先知道列表的大小。但缺点是访问任意一个节点的时间复杂度为O(n),不如数组高效。 如何向链接列表添加节点 首先,我们需要定义节…

    C 2023年5月9日
    00
  • C语言中栈和队列实现表达式求值的实例

    C语言中栈和队列实现表达式求值的实例 在 C 语言中,可以利用栈和队列来实现表达式求值。表达式求值是将字符串形式的表达式转换成计算结果的过程,包括算数表达式和逻辑表达式两种类型。下面将分别对这两种表达式求值进行实例说明。 算数表达式求值 算数表达式求值的过程包括词法分析、语法分析和计算三个过程。词法分析是将字符串表达式拆分成由数字、运算符和括号等组成的多个 …

    C 2023年5月23日
    00
  • C++控制台实现简单人机对弈井字棋

    下面是详细的攻略步骤: 1. 确定游戏基本流程 首先需要明确游戏的基本流程。井字棋游戏中,两名玩家轮流在3*3的棋盘上落子,最先在同一行、同一列或者同一对角线上连成3个相同的棋子的玩家获胜。游戏流程中需要完成的任务如下: 初始化棋盘,将所有格子标记为空 轮流落子(先手为玩家,后手为电脑) 判断当前落子方是否获胜 判断是否和棋 输出当前棋盘 2. 实现井字棋游…

    C 2023年5月23日
    00
  • JS解析后台返回的JSON格式数据实例

    下面是JS解析后台返回的JSON格式数据实例的攻略。 一、JSON格式数据 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。它基于JavaScript语法,但是使用了文本形式来表示数据,因此易于编写和理解。JSON以键值对(key-value pair)的形式组织数据。键名必须是字符串,值可以是任意类型的数据。值可…

    C 2023年5月23日
    00
  • C++中protobuf 的交叉编译使用详解

    C++中protobuf的交叉编译使用详解 protobuf是一种轻量级的数据交换格式,同时也可以在多种编程语言中使用,包括C++、Python、Java等。在C++中使用protobuf,常常需要进行交叉编译。本文将详细讲解如何在C++中进行protobuf的交叉编译。 准备工作 在进行交叉编译之前,需要先进行一些准备工作,包括安装protobuf和交叉编…

    C 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部