【刷题汇总 -- 求最小公倍数、数组中的最长连续子序列、字母收集】

news2024/11/13 8:48:06

C++日常刷题积累

  • 今日刷题汇总 - day008
    • 1、求最小公倍数
      • 1.1、题目
      • 1.2、思路
      • 1.3、程序实现 -- 穷举法
      • 1.2、程序实现 -- 辗转相除法
    • 2、数组中的最长连续子序列
      • 2.1、题目
      • 2.2、思路
      • 2.3、程序实现
    • 3、字母收集
      • 3.1、题目
      • 3.2、思路
      • 3.3、程序实现
    • 4、题目链接

今日刷题汇总 - day008

1、求最小公倍数

1.1、题目

在这里插入图片描述

1.2、思路

读完题知道,需要完成求两个正整数的最小公倍数。那么A和B的最⼩公倍数的公式 = A*B/两者的最⼤公约数。而最⼤公约数:可以使用辗转相除法、穷举法、更相减损法和质因数分解法等。这里就使用最常用的穷举法和辗转相除法即可。接下来,就是程序实现。

1.3、程序实现 – 穷举法

穷举法就是如果大数可以整除小数,那么最大公约数为小数。如果不能整除小数,那么这两个数就按大到小依次对比小数小的数求余,遇到都能够整除的,就是最大公约数。

#include <iostream>
using namespace std;

int main()
{
    int a, b;
    cin >> a >> b;
    int min = a>b ? a : b;
    int ret = 0;
    for(int i = 1;i <= min;i++)
    {
        if(a%i == 0 && b%i == 0)
            ret = i;
    }
    cout << a*b/ret << endl;
    return 0;
}

在这里插入图片描述

在这里插入图片描述

1.2、程序实现 – 辗转相除法

辗转相除法就是用a对b求余,若余数为0,则除数b为最大公约数。若余数不为0,将此余数r作为新的除数,b作为新的被除数,重新求余,直到余数为0为止。此时的最大公约数为除数。

#include <iostream>
using namespace std;

int gcd(int a,int b)
{
    if(b == 0)
        return a;
    return gcd(b,a%b);
}

int main() {
    int a, b;
    cin >> a >> b;
    cout << a*b/gcd(a,b) << endl;
    return 0;
}

在这里插入图片描述

在这里插入图片描述

2、数组中的最长连续子序列

2.1、题目

在这里插入图片描述

2.2、思路

读完题,明白,让我们求无序数组中的连续序列的最大长度,并且连续可与位置无关。刚读完题就联想到感觉跟之前的字符串中找出连续最长的数字串思路类似的计数而已。那么这里先进行可以采用sort数组的排序,然后利用变量countlen记录更新长度,利用maxcount保留最大长度并最后返回,然后遍历数组,当相邻的元素是连续的就更新countlen长度,如果相邻的数值相同则越过继续判断下一位元素即可,最后遍历结束返回最大值maxcount,其中涉及一些细节处理,接下来,就是程序实现。

2.3、程序实现

首先,按照思路sort排序数组和定义好变量,然后写好遍历框架,然后只要响铃元素是连续或者相等的元素,则继续j++遍历,否则break即可,直到len结束while,进入下次循环前需要更新j = i+1重新从新的连续位置遍历,countlen = 1来重新计入countlen 大小其中注意无需i++,可以直接越过countlen。所以也可以得出,不需要每次都i++,可以直接越过countlen,避免重复判断比较操作。最后,得到的maxcount就是最大长度。

class Solution {
public:
    int MLS(vector<int>& arr)
    {
        sort(arr.begin(),arr.end());
        int len = arr.size();
        int j = 0;
        int countlen = 1;
        int maxcount = 0;
        for(int i = 0;i < len; i+=countlen)
        {
            j = i + 1;
            countlen = 1;
            while(j < len)
            {
                if(arr[j] - arr[j-1] == 1)
                {
                    countlen++;
                    j++;
                }
                else if(arr[j] - arr[j-1] == 0)
                {
                    j++;
                }
                else
                {
                    break;
                }
            }
            maxcount = max(maxcount , countlen);
        }
        return maxcount;
    }
};

在这里插入图片描述

在这里插入图片描述

3、字母收集

3.1、题目

在这里插入图片描述

3.2、思路

读完题,知道让实现在n*m矩阵中,拼接或者搜索或者贪心收集,按照一定的规则走最优的路径使得获得的分数最多。那么这里使用推导dp动态规划思路,只要使用dp就得确定dp[i]动态表示和动态转移方程。由题目规则很容易想到:
dp[i][j]表示:到第i行j列的最大分数和;
那么推导状态转移方程就是:dp[i][j] = 由左边dp[i][j-1]或上方dp[i-1][j],再加上其分数得到;
即: dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]) + score;值得注意的是,此题是从下标1开始的。那么接下来,就是程序实现。

3.3、程序实现

首先,按照题目要求和思路定义字符二维数组和dp数组,接着输入n*m二维数组,下标从1开始的。然后,定义score分数变量,接着遍历二维数组,判断并匹配字符是否为加分字符,累加到dp[i][j]中,最后输出dp[n][m]即可。

#include <iostream>
using namespace std;

const int N = 501;
char ch[N][N];
int dp[N][N];

int main() {
    int n,m;
    cin >> n >> m;
    for(int i = 1;i <= n;i++)
    {
        for(int j = 1;j <= m;j++)
        {
            cin >> ch[i][j];
        }
    }

    int score = 0;
    for(int i = 1;i <= n;i++)
    {
        for(int j = 1;j <= m;j++)
        {
            if(ch[i][j] == 'l')
                score = 4;
            else if(ch[i][j] == 'o')
                score = 3;
            else if(ch[i][j] == 'v')
                score = 2;
            else if(ch[i][j] == 'e')
                score = 1;
            else
                score = 0;
            dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]) + score;
        }
    }
    cout << dp[n][m] << endl;
    return 0;
}

在这里插入图片描述

在这里插入图片描述

4、题目链接

求最小公倍数
数组中的最长连续子序列
字母收集

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

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

相关文章

01:简易的电动车防盗报警器

简易的电动车防盗报警器 1、震动传感器模块的使用2、使用震动传感器模块控制继电器开关3、433M无线发射接收模块的使用 需要材料&#xff1a; 1、51单片机 2、震动传感器模块 3、继电器模块 4、高功率喇叭 5、433M无线发射接收模块 6、弱干杜邦线 1、震动传感器模块的使用 接好…

13 - matlab m_map地学绘图工具基础函数 - 介绍创建管理颜色映射的函数m_colmap和轮廓图绘制颜色条的函数m_contfbar

13 - matlab m_map地学绘图工具基础函数 - 介绍创建管理颜色映射的函数m_colmap和轮廓图绘制颜色条的函数m_contfbar 0. 引言1. 关于m_colmap2. 关于m_contfbar3. 结语 0. 引言 本篇介绍下m_map中用于创建和管理颜色映射函数&#xff08;m_colmap&#xff09;和 为轮廓图绘制颜…

大话光学原理:2.最短时间原理、“魔法石”与彩虹

一、最短时间原理 1662年左右&#xff0c;费马在一张信纸的边角&#xff0c;用他那著名的潦草笔迹&#xff0c;随意地写下了一行字&#xff1a;“光在两点间选择的路&#xff0c;总是耗时最少的。”这句话&#xff0c;简单而深邃&#xff0c;像是一颗悄然种下的种子&#xff0c…

EEG源定位(EEG Source Localization)

EEG源定位&#xff08;EEG Source Localization&#xff09;是一种用于确定大脑内部电活动来源的方法。通过在头皮上记录的电信号&#xff08;EEG&#xff09;&#xff0c;源定位技术可以推断这些信号的起源&#xff0c;即确定大脑中的哪些区域产生了这些电活动。这对于理解大脑…

Java项目:基于SSM框架实现的中小型企业财务管理系统【ssm+B/S架构+源码+数据库+答辩PPT+开题报告+毕业论文】

一、项目简介 本项目是一套基于SSM框架实现的中小型企业财务管理系统 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xff0c;eclipse或者idea 确保可以运行&#xff01; 该系统功能完善、界面美观、操作简单…

ESP32的I2S引脚及支持的音频标准使用说明

ESP32 I2S 接口 ESP32 有 2 个标准 I2S 接口。这 2 个接口可以以主机或从机模式&#xff0c;在全双工或半双工模式下工作&#xff0c;并且可被配置为 8/16/32/48/64-bit 的输入输出通道&#xff0c;支持频率从 10 kHz 到 40 MHz 的 BCK 时钟。当 1 个或 2 个 被配置为主机模式…

IEC62056标准体系简介-2.IEC62056标准体系及对象标识系统(OBIS)

1. IEC 62056标准体系 IEC 62056标准体系目前共包括六部分&#xff0c;见图1&#xff1a; 第61部分&#xff1a;对象标识系统第62部分&#xff1a;接口类第53部分&#xff1a;COSEM应用层第46部分&#xff1a;使用HDLC&#xff08;High Level Data Link Control&#xff09;协…

24吉林事业单位报名照上传通过别忘了这一步

24吉林事业单位报名照上传通过别忘了这一步 #吉林事业单位 #吉林三支一扶 #吉林事业编 #事业单位报名照片 #吉林事业单位考试 #吉林市事业单位

ChatGPT-4o大语言模型优化、本地私有化部署、从0-1搭建、智能体构建技术

在过去几年中&#xff0c;人工智能领域的发展迅猛&#xff0c;尤其是大语言模型的应用&#xff0c;为各行各业带来了前所未有的创新与突破。从ChatGPT-3.5的推出到GPT Store的上线&#xff0c;再到最新的多模态交互ChatGPT-4o&#xff0c;OpenAI不断引领科技潮流&#xff0c;推…

vite+vue3整合less教程

1、安装依赖 pnpm install -D less less-loader2、定义全局css变量文件 src/assets/css/global.less :root {--public_background_font_Color: red;--publicHouver_background_Color: #fff;--header_background_Color: #fff;--menu_background: #fff; }3、引入less src/main.…

从数据仓库到数据湖(上):数据湖导论

文章目录 一、什么是数据湖&#xff1f;起源数据湖的特征 二、为什么要用数据湖&#xff1f;三、数据湖与数据仓库的区别数据仓库和数据湖的对比 四、数据湖本质数据存储架构数据处理工具&#xff1a;三类第一类工具第二类工具第三类工具 小结 五、总结六、参考资料 一、什么是…

x86芯片定制,Ethercat芯片定制,IP服务,适用于运动控制,工业总线等软硬一体机

x86芯片定制&#xff0c;Ethercat芯片定制 X86平台 我们的研发工程师已经积累了非常丰富的主板、整机设计经验&#xff0c;对接您的产品规格场景需求&#xff0c;快速交付样机&#xff0c;包含主板、BOX整机、平板电脑、CPCI等形态产品。降本、长生命周期、快速交付、及时响应…

01 | 基础架构:一条SQL查询语句是如何执行的?

此系列文章为极客时间课程《MySQL 实战 45 讲》的学习笔记&#xff01; 引言 在了解 SQL 查询语句如何执行之前&#xff0c;先了解下MySQL 的基本架构示意图。 MySQL 分为 Server 层和引擎层。 Server 层包括连接器、查询缓存、分析器、优化器、执行器等&#xff0c;涵盖 M…

华为机试HJ108求最小公倍数

华为机试HJ108求最小公倍数 题目&#xff1a; 想法&#xff1a; 要找到输入的两个数的最小公倍数&#xff0c;这个最小公倍数要大于等于其中最大的那个数值&#xff0c;遍历最大的那个数值的倍数&#xff0c;最大的最小公倍数就是输入的两个数值的乘积 input_number_list i…

PTA - sdut-使用函数求a+aa+aaa++⋯+aa.....aaa(n个a)之和

题目描述&#xff1a; 给定两个均不超过9的正整数a和n&#xff0c;要求&#xff1a;编写函数fn(a,n)&#xff0c; 求aaaaaa⋯aa⋯aa(n个a&#xff09;之和&#xff0c;fn须返回的是数列之和。 函数接口定义&#xff1a; def fn(a,n):其中&#xff0c; a 和 n 都是传入的参数…

1.Frida框架-Frida环境搭建

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a;微尘网校 前置条件&#xff1a;需要科学上网 工具下载&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F…

7.9总结

容易推出当移动i与j时等价于j-i-1个左右交换&#xff0c;且每次交换逆序数的奇偶改变&#xff08;无相同元素&#xff09;&#xff0c;假设有一个状态c&#xff0c;且a与b必须以等量的左右交换转移为c&#xff0c;则必须数量相同&#xff0c;元素相同&#xff08;使用异或解决&…

vue学习day04-计算属性、computed计算属性与methods方法、计算属性完整写法

10、计算属性 &#xff08;1&#xff09;概念&#xff1a; 基于现有的数据&#xff0c;计算出来的新属性。依赖于数据变化&#xff0c;自动重新计算。 &#xff08;计算属性->可以将一段求值的代码进行封装&#xff09; &#xff08;2&#xff09;语法&#xff1a; 1&a…

Spring源码二十:Bean实例化流程三

上一篇Spring源码十九&#xff1a;Bean实例化流程二中&#xff0c;我们主要讨论了单例Bean创建对象的主要方法getSingleton了解到了他的核心流程无非是&#xff1a;通过一个简单工厂的getObject方法来实例化bean&#xff0c;当然spring在实例化前后提供了扩展如&#xff1a;bef…

【堆 (优先队列) 扫描线】218. 天际线问题

本文涉及知识点 堆 &#xff08;优先队列) 扫描线 LeetCode218. 天际线问题 城市的 天际线 是从远处观看该城市中所有建筑物形成的轮廓的外部轮廓。给你所有建筑物的位置和高度&#xff0c;请返回 由这些建筑物形成的 天际线 。 每个建筑物的几何信息由数组 buildings 表示&…