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日

相关文章

  • Java如何自定义异常打印非堆栈信息详解

    如何自定义异常打印非堆栈信息 在Java程序中,当代码抛出异常时,异常信息中除了常见的堆栈信息(stack trace)外,还可以自定义异常信息和错误代码等非堆栈信息。这种自定义异常信息可以更加清晰地描述异常情况,便于程序员快速定位和排查问题。下面是一种标准的Java自定义异常的方式,结合代码实例进行说明。 自定义异常示例 在Java中,我们可以通过继承Ex…

    C 2023年5月23日
    00
  • 浅析Java异常处理中断言的使用

    浅析Java异常处理中断言的使用 Java异常处理机制允许程序在出现错误和异常时进行优雅的处理,从而保证程序的安全性和稳定性。而其中断言(assertion)机制则是一种非常强大的调试工具,可以在程序出现错误时,中断程序并给出特定的提示,帮助程序员更快地定位和修复问题。 在本篇攻略中,我们将分为以下几个部分,详细讲解Java异常处理中断言的原理、用法及注意事…

    C 2023年5月23日
    00
  • Windows程序内部运行机制实例详解

    Windows程序内部运行机制实例详解 本篇介绍一些 Windows 程序的内部运行机制,包括程序启动的过程、线程的创建和同步、进程的管理和通信等。本文中的示例是基于 C# 编写的,但是所讲的原理对其他编程语言同样适用。 程序的启动过程 当用户双击一个程序的可执行文件时,操作系统会为该程序创建一个进程。进程是隔离和保护应用程序的一个容器,包括了代码、数据和系…

    C 2023年5月23日
    00
  • C#操作SQLite数据库方法小结

    关于C#操作SQLite数据库方法小结,我可以提供以下攻略: 1. 安装SQLite 在使用SQLite之前,需要先安装SQLite数据库,在Windows上可以从官方网站下载SQLite安装程序进行安装。 2. 创建SQLite数据库 为了进行SQLite数据库的操作,需要使用以下命令创建连接并打开数据库: SQLiteConnection conn = …

    C 2023年5月22日
    00
  • C/C++读写JSON数据的详细过程记录

    C/C++读写JSON数据的详细过程记录 什么是JSON JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于读写和解析,同时也易于机器生成和解析。JSON文本格式在互联网上广泛应用,尤其在Web应用中,如:动态数据的传输。常用于替代XML格式,因为JSON格式更加简洁、易读、易于解析和生成。 读取JSON数据 使…

    C 2023年5月23日
    00
  • C C++ LeetCode题解在二叉树中增加一行示例详解

    C C++ LeetCode题解在二叉树中增加一行示例详解 在二叉树中增加一行的题目通常会让很多人头疼,本文将为大家提供一个详细而完整的攻略,同时提供两条示例说明。 题目描述 给定一个二叉树,根节点为第1层,现在要在第d层插入一个值为v的节点,使得原来的树变成新的树。插入完之后,新节点应该在原来第d层节点的左子树的位置上。 解题思路 一般情况下,我们可以采用…

    C 2023年5月23日
    00
  • C 程序 计算圆的面积和周长

    C程序:计算圆的面积和周长 本篇文章将介绍如何使用C语言编写一个简单的程序,用于计算圆的面积和周长。该程序可以通过输入圆的半径,计算出圆的面积和周长。 环境准备 在开始编写程序之前,您需要确保已经安装了C编译器。如果您使用的是Windows系统,可以安装一个叫做Code::Blocks的集成开发环境。 编写程序 下面是C程序的代码: #include &lt…

    C 2023年5月9日
    00
  • opencv3/C++ PHash算法图像检索详解

    OpenCV3/C++ PHash算法图像检索详解 简介 PHash算法(Perceptual Hash)是一种具有可靠性、兼容性等特点的图像检索技术。它可以在不同分辨率、不同光照、不同色彩值等多种情况下进行图像比较和检索。本篇文章将以OpenCV3和C++语言为基础,详细讲解如何使用PHash算法进行图像检索。 安装OpenCV OpenCV是一个开源计算…

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