当前位置: 首页 > news >正文

笔试练习day8

目录

  • HJ108 求最小公倍数
    • 题目解析
      • 代码
  • 数组中的最长连续子序列
    • 题目解析
      • 代码
  • 字母收集
    • 题目解析
      • 代码

感谢各位大佬对我的支持,如果我的文章对你有用,欢迎点击以下链接
🐒🐒🐒 个人主页
🥸🥸🥸 C语言
🐿️🐿️🐿️ C语言例题
🐣🐣🐣 python
🐓🐓🐓 数据结构C语言
🐔🐔🐔 C++
🐿️🐿️🐿️ 文章链接目录
🏀🏀🏀 笔试练习题

HJ108 求最小公倍数

链接
在这里插入图片描述

题目解析

这道题是求最大公约数,最大公约数表示位lcm(a,b)
我们都知道最大公约数lcm(a,b)有这么一个等式
lcm(a,b)=ab/gcb(a,b)(最大公约数)
比如a=4 b=8那么计算就为a
b/(4)=8
这道题有两种思路
一种是试除法,就是a和b从大到小一个一个的除,或者就是a和b在2到9这个范围内一直除,直到除完为止
另一种就是辗转相除法
在这里插入图片描述
在这道题中最大公约数是这样表示的gcb(a,b)=gcb(b,a%b)
也就是说a和b的最大公约数等于b和a%b的最大公约数
现在我们将gcb(b,a%b)中的第一个数重新命名位c,a%b出现命名为d
那么就是变成了gcb(c,d)
然后我们以同样的方法
gcb(c,d)=gcb(d,c%d)…
这种就转换成了递归的方式求解

代码

#include <iostream>
using namespace std;
int gcb(int a,int b)
{
    if(b==0)
    return a;
    return gcb(b,a%b);
}
int main() {
int a=0,b=0;
cin>>a>>b;
cout<<(a*b/gcb(a,b))<<endl;
return 0;
}

数组中的最长连续子序列

链接在这里插入图片描述

题目解析

这道题题目有点难理解
就以题目的例子为例

[100,4,200,1,3,2] 我们可以抽出1 2 3 4组成一个连续序列
因为题目要求的只是值连续,位置不用管,即使4在1 3 2的前面也没问题

我的想法就是遍历一遍数组,我们取名为arr1,然后用一个数组arr2,用arr2的下标表示arr1数组里面元素的值,最后只需要遍历一遍arr2就可以了

另一种思路就是先排完序,然后用双指针的方法重新遍历一遍arr1
比如
在这里插入图片描述
在这里插入图片描述
当j-i的值为1的时候,i和j就往后走
在这里插入图片描述
当j-i=0时就直接跳过
在这里插入图片描述
在这里插入图片描述
就这样一直遍历,最后输出长度

代码

class Solution {
public:

    int MLS(vector<int>& arr) {
       sort(arr.begin(),arr.end());
       int n=arr.size(),ret=0;
       for(int i=0;i<n;)
       {
        int j=i+1,count=1;
        while(j<n)
        {
            if(arr[j]-arr[j-1]==1)
            {
                count++; 
                j++; 
            }
            else if(arr[j]-arr[j-1]==0)
            {
                j++;
            }
            else 
            break;
        }
        ret=max(ret,count);
        i=j;
       }
       return ret;
    }
};

for循环中 for(int i=0;i<n;) 没有i++是因为后面 i=j会将i的值进行变化,如果有i++的话那么i的位置会发生变化

字母收集

链接
在这里插入图片描述

题目解析

这道题是用动态规划去做
在这里插入图片描述
从题目可以得到小红只能往下和右这两个方向走,直到走到f

具体做法就是先用状态表示
在这里插入图片描述
当小红到达( i , j )这个位置时的最大得分是多少,我们以dp[ i ][ j ]表示
然后构造状态转移方程
小红到达这个位置的两种情况
在这里插入图片描述
我们假设(i,j)这个位置的分数为1
那么dp[ i ][ j ]=max( dp[i-1] [ j ] + 1,dp[ i ] [j-1] + 1)

然后我们还需要考虑初始化问题,这里有两种方式,第一种就是直接得到dp[ 1 ] [ 1 ]的值,另一种就是多加一行一列,然后让这些多加的初始值设为0,这样dp[0][0]就为0了

代码

#include <iostream>
using namespace std;
const int N=510;
char g[N][N];
int dp[N][N];
int m,n;
int main() {
cin>>m>>n;
for(int i=1;i<=m;i++)
{
    for(int j=1;j<=n;j++)
    {
        cin>>g[i][j];
        int t=0;
        if(g[i][j]=='l') t=4;
        else if(g[i][j]=='o') t=3;
         else if(g[i][j]=='v') t=2;
         else if(g[i][j]=='e') t=1;
        else t=0;
         dp[i][j]=max(dp[i-1][j],dp[i][j-1])+t;
    }
}
cout<<dp[m][n]<<endl;
return 0;
}

相关文章:

  • 【Python3教程】Python3基础篇之数据结构
  • 一文讲解Redis的内存淘汰和过期策略
  • Python爬取某云热歌榜:解析动态加载的歌曲数据
  • 项目收支管理怎么做
  • vue+element-dialog:修改关闭icon / 遮罩层不能挡住弹窗 / 遮罩层不能遮挡元素
  • Redis分布式缓存面试题
  • 螺旋数字矩阵
  • LeetCode225.用队列实现栈
  • unity学习55:按钮 button
  • 基于DeepSeek的智能客服系统安全与隐私保护:构建可信赖的服务
  • react native中如何实现吸顶的效果
  • 《ArkTS鸿蒙应用开发入门到实战》—新手小白学习鸿蒙的推荐工具书!
  • 一键部署DeepSeek
  • 明晚见:快速上手 IoTDB 树表双模型,功能/场景直播详解!
  • 高效能计算与高速数据传输的完美结合:飞腾D2000处理器与复旦微双FPGA集成主板
  • 物联网+大数据,智慧公租房管理系统构建未来社区
  • 刷题记录 HOT100 子串-1:560. 和为 K 的子数组
  • 前端关于Cursor编辑器的了解与深度使用及对工作的便利
  • c++之原始字符串字面量(raw string-literals)
  • AOP进阶-03.切入点表达式-execution
  • 人民日报评外卖平台被约谈:摒弃恶性竞争,实现行业健康发展
  • 加强战略矿产出口全链条管控工作部署会召开
  • 人民日报整版聚焦:专家学者看2025中国经济增长点
  • 邯郸一酒店办婚宴发生火灾,新郎母亲:饭没吃成酒店还要收费
  • “科创板八条”后百单产业并购发布,披露交易金额超247亿
  • 明查|哈佛大学批改美教育部长来信,红笔标出语法错误?