【蓝桥杯选拔赛真题34】C++最大值 第十三届蓝桥杯青少年创意编程大赛C++编程选拔赛真题解析

news2024/11/24 0:06:36

目录

C/C++最大值

一、题目要求

1、编程实现

2、输入输出

二、算法分析

三、程序编写

四、程序说明

五、运行结果

六、考点分析

七、推荐资料


C/C++最大值

第十三届蓝桥杯青少年创意编程大赛C++选拔赛真题

一、题目要求

1、编程实现(C++)

给定一个正整数M(1≤M≤5)和一个只包含数字的字符串(5<字符长度≤20)。使用M个乘号插入到字符中,且两个乘号不能相邻,插入后生成一个乘法算式。找出一种使乘法算式数值最大的插入方式,并将结果输出。 (乘号不能放在字符串的首尾位置)如M=2.字符串为123456,插入2个乘号。插入方式有:
1*2*3456=6912,1*23*456=10488,1*234*56=13104,1*2345*6=14070,12*3*456=16416 12*34*56=22848,12*345*6=24840,123*4*56=27552,123*45*6=33210,1234*5*6=37020

2、输入输出

输入描述:第一行输入一个正整数M(1≤M≤5),表示乘号个数

第二行输入一个只包含数字的字符串(5<字符串长度≤20),表示要插入M个乘号的字符串。

输出描述:只有一行,输出一个整数,表示最大乘积数值

输入样例:

2
123456

输出样例:

37020

二、算法分析

  1. 从给定题目的初步分析可以看出,本题还是有一定的难度
  2. 本题应该属于比较典型的动态规划题型,我们在分析的时候可以将插入的乘号进行分段,如要插入k个乘号,就可以把问题看成是k个阶段的决策问题
  3. 设f[i][k]表示在前i位数中插入k个乘号所得的最大值,a[j][i]表示从第j位所组成的自然数
  4. 用f[i][k]存储阶段k的每一个状态,可以得到对应的状态转移方程:f[i][k] = max(f[i][k],f[j][k-1] * a[j+1][i]);
  5. 对应的边界值为:f[j][0] = a[1][j];
  6. 就可以得到对应的动态规划程序:
  7. for(int k = 1;k <= m;k++)
            for(int i = k + 1;i <= n;i++)
                for(int j = k;j < i;j++)
                    f[i][k] = max(f[i][k],f[j][k-1] * a[j+1][i]);

三、程序编写

#include <iostream>
using namespace std;
long long a[21][21],f[21][21];
long long s;
//返回数字的长度
int getNumDigits(int num) 
{
    int count = 0;   
    if (num == 0) 
	{
        return 1;  // 如果num为0,直接返回1
    }
    while (num > 0) 
	{
        num = num / 10;
        count++;
    }
    return count;
}
int main(void) 
{
	int m,n;
	cin >> m >> s;
	n = getNumDigits(s);
	for(int i = n;i >= 1;i--)
	{
		a[i][i] = s % 10;
		s /= 10;
	}
	
	for(int i = 2;i <= n;i++)
		for(int j = i - 1;j >= 1;j--)
			a[j][i] = a[j][i-1] * 10 + a[i][i];
	
	for(int i = 1;i <= n;i++)//不加乘号的情况
		f[i][0] = a[1][i];
		
	for(int k = 1;k <= m;k++)
		for(int i = k + 1;i <= n;i++)
			for(int j = k;j < i;j++)
				f[i][k] = max(f[i][k],f[j][k-1] * a[j+1][i]);
	cout << f[n][m];
    return 0;
}

四、程序说明

  1. 首先需要导入输入输出流头文件
  2. 然后是引入std命名空间中的所有成员到当前的程序中,这样在当前的程序中就可以直接使用 std 命名空间中的所有成员,而不需要使用的时候在成员前面加上(std::)前缀
  3. 接着声明两个长整型数二维组a存储对应的每一位和f存储中间计算的结果
  4. 在声明一个长整型变量s
  5. 先声明一个getNumDigits自定义函数用来返回输入整数的位数
  6. 接着声明程序的入口,也就是主函数(主函数在一个程序中只允许出现一次)
  7. 根据题目要求声明2个整形变量m和n
  8. 然后利用输入流对象cin,从键盘读取这2个变量的值
  9. 接着利用for循环将s的每一位数字存储到二维数组a的对角线上。注意这里是从最高位到最低位依次存储
  10. 然后用一个双层for循环来填充数组a的其余部分
  11. 紧接着的for循环用于初始化数组f的第一列(即没有乘号的情况)
  12. 接下来的三层嵌套for循环就是我们的动态求解方程,目标是计算所有可能的m次乘法操作后得到的最大乘积
  13. 最后利用输出流对象cout,输出计算得到的最大乘积f[n][m]
  14. 最后返回0,程序结束

 本文作者:小兔子编程 作者首页:https://blog.csdn.net/frank2102

五、运行结果

7
You are too young!

六、考点分析

难度级别:难,这题相对而言还是有一定难度的,难在如何设计求解算法,是否会想到使用动态规划来求解,具体主要考查如下:

  1. 充分掌握变量、数组的定义和使用
  2. 充分掌握动态规划算法的求解步骤,如何确定边界值和状态转移方程
  3. 学会输入流对象cin的使用,从键盘读入相应的数据
  4. 学会for循环以及嵌套循环的使用,在确定循环次数的时候推荐使用学会
  5. 掌握输出流对象cout的使用,与流插入运算符 << 结合使用将对象输出到终端显示
  6. 学会分析题目,算法分析,将复杂问题模块化,简单化,从中找到相应的解题思路
  7. 充分掌握变量定义和使用、分支语句、循环语句和简单算法知识的使用及输入输出的用法

PS:方式方法有多种,小朋友们只要能够达到题目要求即可!

七、推荐资料

  • 所有考级比赛学习相关资料合集【推荐收藏】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1445759.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

黄金交易策略(Nerve Nnife.mql4):趋势做单

完整EA&#xff1a;Nerve Knife.ex4黄金交易策略_黄金趋势ea-CSDN博客 当大小趋势相同行情走向也相同&#xff0c;就会开仓做顺势单&#xff0c;并会顺势追单&#xff0c;以达到快速止盈平仓的效果。大趋势追求稳定&#xff0c;小趋势追求敏捷&#xff0c;行情走向比小趋势更敏…

【JAVA-Day75】Java字节输出流,掌握OutputStream

标题 《Java字节输出流深度解析&#xff1a;掌握OutputStream的奥秘》摘要引言一、什么是字节输出流 &#x1f680;基本原理常用方法write(int b)write(byte[] b)write(byte[] b, int off, int len) 示例代码注意事项 二、字节输出流操作TXT &#x1f4c4;文件写入基本步骤示例…

i.MX6ULL 嵌入式学习(一)

i.MX6ULL 嵌入式学习(一) i.MX6ULL理论知识 i.MX6ULL 嵌入式学习(一)进程psipc 进程间通信管道信号(类似中断)system-V 消息队列system-V 信号量system-V 共享内存 进程 创建进程(复制)&#xff0c;同程序 fork #include<unistd.h> a. 返回值 成功 0 或 非负非零整数( 父…

FL Studio版本升级-FL Studio怎么升级-FL Studio升级方案

已经是新年2024年了&#xff0c;但是但是依然有很多朋友还在用FL Studio12又或者FL Studio20&#xff0c;今天这篇文章教大家如何升级FL Studio21 FL Studio 21是Image Line公司开发的音乐编曲软件&#xff0c;除了软件以外&#xff0c;我们还提供了FL Studio的升级服务&#…

【C语言】assert断言:保护程序的利器

在软件开发过程中&#xff0c;我们经常会遇到一些假设条件或者预期行为。例如&#xff0c;我们可能假设一个函数的输入参数必须在某个范围内&#xff0c;或者某个变量的值应该满足特定的条件。当这些假设或预期行为被打破时&#xff0c;程序可能会出现异常行为&#xff0c;甚至…

轻薄型机型EM-T195,对移动作业so easy

由于移动工作环境特殊且不固定&#xff0c;不仅温差大&#xff0c;还会产生潮湿、干燥、灰尘等恶劣气候环境&#xff0c;使普通平板电脑无法适应移动工作。但三防平板电脑是设计制造的&#xff0c;材料特殊&#xff0c;可以平静面对上述恶劣环境&#xff0c;保证随时随地保持良…

备战蓝桥杯---数学基础3

本专题主要围绕同余来讲&#xff1a; 下面介绍一下基本概念与定理&#xff1a; 下面给出解这方程的一个例子&#xff1a; 下面是用代码实现扩展欧几里得算法&#xff1a; #include<bits/stdc.h> using namespace std; int gcd(int a,int b,int &x,int &y){if(b…

C++三剑客之std::optional(一) : 使用详解

相关文章系列 C三剑客之std::optional(一) : 使用详解 C三剑客之std::any(一) : 使用 C之std::tuple(一) : 使用精讲(全) C三剑客之std::variant(一) : 使用 C三剑客之std::variant(二)&#xff1a;深入剖析 目录 1.概述 2.构建方式 2.1.默认构造 2.2.移动构造 2.3.拷贝构…

【深度学习:迁移学习】图像识别预训练模型的迁移学习

【深度学习&#xff1a;迁移学习】图像识别预训练模型的迁移学习 什么是迁移学习&#xff1f;为什么不从头开始训练模型&#xff1f;迁移学习的优点是&#xff1a;如何使用预训练模型进行迁移学习&#xff1a;迁移学习的过程&#xff1a;实施迁移学习来构建人脸识别模型&#x…

tcp 中使用的定时器

定时器的使用场景主要有两种。 &#xff08;1&#xff09;周期性任务 这是定时器最常用的一种场景&#xff0c;比如 tcp 中的 keepalive 定时器&#xff0c;起到 tcp 连接的两端保活的作用&#xff0c;周期性发送数据包&#xff0c;如果对端回复报文&#xff0c;说明对端还活着…

【GAMES101】Lecture 22 物理模拟与仿真

目录 单粒子模拟 显式欧拉方法 改进 中点法/修正的欧拉方法 自适应步长 隐式欧拉方法 非物理改变位置&#xff08;Position-Based / Verlet Integration&#xff09; 刚体模拟 流体模拟 单粒子模拟 先来研究粒子的运动&#xff0c;假设有一个速度矢量场&#xff0c;对…

记录一下,我使用stm32实现pwm波输入,以及对频率和占空比的计算,同时通过串口输出(实现-重要)

1&#xff0c;首先看下半物理仿真 看下我的配置&#xff1a; 看下计算方法以及matlab的仿真输出的数据&#xff1a; timer3的ch2是选择高电平&#xff0c;计算频率 timer3的ch1是选择的是低电平&#xff0c;用来计算周期 其中TemPIpre表示的是CH2输出的值&#xff0c; TemPI…

牛客周赛 Round 32 解题报告 | 珂学家 | 状压 + 前缀和异或map技巧

前言 整体评价 属于补题&#xff0c;大致看了下&#xff0c;题都很典。 欢迎关注 珂朵莉 牛客周赛专栏 珂朵莉 牛客小白月赛专栏 A. 小红的 01 背包 思路: 数学题 v, x, y list(map(int, input().split()))print (v // x * y)B. 小红的 dfs 思路: 枚举 其实横竖都有dfs…

网络协议与攻击模拟_16HTTP协议

1、HTTP协议结构 2、在Windows server去搭建web扫描器 3、分析HTTP协议流量 一、HTTP协议 1、概念 HTTP&#xff08;超文本传输协议&#xff09;用于在万维网服务器上传输超文本&#xff08;HTML&#xff09;到本地浏览器的传输协议 基于TCP/IP(HTML文件、图片、查询结构等&…

Windows Anaconda 运行 gempy examples。示例::

默认读者已安装&#xff1a;Anaconda. 若未安装请参考以下文章&#xff1a; Windows中如何使用 Anaconda 和 gempy地质建模 1&#xff0c;打开Anaconda Navigator: 打开后如此&#xff1a; 运行JupyterLab: launch。 打开gempy example 建模示例&#xff1a; 官方地址&#x…

Linux diff命令

参考资料 【 diff 】コマンド&#xff08;基本編&#xff09;――テキストファイルの差分を出力する便利なdiffコマンド使い方 目录 前期准备一. 基本语法二. 文件比较2.1 无配置项2.2 -B 忽略空行&#xff0c;-w忽略空格2.3 -y 文件内容横向比较显示2.4 -q 仅显示文件是否不同…

AlmaLinux右键菜单(基于GNOME桌面)

文章目录 前言前提说明在文件上右键在文件夹上右键 前言 在使用VSCode的过程中&#xff0c;AlmaLinux没能像Windows一样在右键菜单上显示打开方式&#xff0c;所以找了一下解决方案&#xff0c;罗列出来 前提说明 虽然说无论是media还是StackOverflow都推荐使用这条命令&…

2024年华为OD机试真题-多段线数据压缩-Java-OD统一考试(C卷)

题目描述: 下图中,每个方块代表一个像素,每个像素用其行号和列号表示。 为简化处理,多段线的走向只能是水平、竖直、斜向45度。 上图中的多段线可以用下面的坐标串表示:(2, 8), (3, 7), (3, 6), (3, 5), (4, 4), (5, 3), (6, 2), (7, 3), (8, 4), (7, 5)。 但可以发现,这…

Stable Diffusion 模型下载:majicMIX lux 麦橘辉耀 - V3

本文收录于《AI绘画从入门到精通》专栏,专栏总目录:点这里。 文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八案例九案例十

王树森《RNN Transformer》系列公开课

本课程主要介绍NLP相关&#xff0c;包括RNN、LSTM、Attention、Transformer、BERT等模型&#xff0c;以及情感识别、文本生成、机器翻译等应用 ShusenWang的个人空间-ShusenWang个人主页-哔哩哔哩视频 (bilibili.com) &#xff08;一&#xff09;NLP基础 1、数据处理基础 数…