c++:蓝桥杯的基础算法2(构造,模拟)+练习巩固

目录

构造

构造的基础概念:

模拟

练习1:扫雷 

练习2:灌溉 

 练习3:回文日期


构造

构造的基础概念:

构造算法是一种用于解决特定问题的算法设计方法。在C++语言中,构造算法通常涉及到创建一个函数或类来实现特定的功能。以下是一个用C++语言详细介绍构造算法的示例:

#include <iostream>
#include <vector>

// 定义一个函数来实现构造算法
void constructAlgorithm(std::vector<int>& nums) {
    int n = nums.size();
    
    // 在这里实现构造算法的具体逻辑
    for (int i = 0; i < n; i++) {
        nums[i] = i * i;
    }
}

int main() {
    // 创建一个包含一定数量元素的向量
    std::vector<int> nums = {1, 2, 3, 4, 5};
    
    // 调用构造算法函数来处理向量中的元素
    constructAlgorithm(nums);
    
    // 输出处理后的向量元素
    for (int i = 0; i < nums.size(); i++) {
        std::cout << nums[i] << " ";
    }
    
    return 0;
}

在上面的示例中,我们定义了一个名为constructAlgorithm的函数来实现构造算法的逻辑。在main函数中,我们创建了一个包含一定数量元素的向量,并调用constructAlgorithm函数来处理向量中的元素。最后,我们输出处理后的向量元素。

通过这种方式,我们可以使用C++语言来实现构造算法,解决特定问题并实现所需的功能。


模拟

模拟算法是一种通过模拟真实世界情况来解决问题的方法。在C++中,可以通过编写代码来模拟算法的思路。

以下是一个简单的示例,介绍如何用C++代码实现一个简单的模拟算法:

#include <iostream>

int main() {
    // 模拟一个简单的情况,假设有5个人排队等待进入电影院
    int queue[5] = {1, 2, 3, 4, 5};

    // 模拟每个人进入电影院的过程
    for (int i = 0; i < 5; i++) {
        std::cout << "Person " << queue[i] << " enters the cinema." << std::endl;
    }

    // 模拟电影播放结束,人们陆续离开电影院
    for (int i = 0; i < 5; i++) {
        std::cout << "Person " << queue[i] << " leaves the cinema." << std::endl;
    }

    return 0;
}

在这个示例中,我们模拟了一个简单的场景:5个人排队等待进入电影院,然后陆续进入电影院观影,最后陆续离开电影院。通过这个简单的例子,展示了如何用C++代码实现模拟算法的思路。在实际应用中,可以根据具体问题的情况,编写相应的模拟算法代码。

练习1:扫雷 

1.扫雷 - 蓝桥云课 (lanqiao.cn)

答案和思路: 

#include<bits/stdc++.h>
using namespace std;
int n,m;
int arr[105][105],ans[105][105];
int main()
{
    // 输入n和m的值
    cin>>n>>m;

    // 输入矩阵arr的值
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
        {
            cin>>arr[i][j];
        }
    }

    // 计算每个位置周围的1的个数
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
        {
            if(arr[i][j]==1)
            {
                ans[i][j]=9; // 如果当前位置为1,则置为9
                continue;
            }
            for(int _i=max(0,i-1);_i<=min(n,i+1);_i++)
            {
                for(int _j=max(0,j-1);_j<=min(m,j+1);_j++)
                {
                    if(arr[_i][_j]==1) ans[i][j]++; // 统计周围1的个数
                }
            }
        }
    }

    // 输出ans矩阵
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
        {
            cout<<ans[i][j]<<" ";
        }
        cout<<endl;
    }
    return 0;
}

练习2:灌溉 

1.灌溉 - 蓝桥云课 (lanqiao.cn)

思路和代码:

思路:定义两个数组,用1记录初始水方块a,根据题意跟新对应水方块,用更新完的水方块b覆盖a,再次迭代,直到次数结束,在规定范围内统计水方块个数。
#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n, m; // 定义矩阵的行数和列数
    cin >> n >> m; // 输入矩阵的行数和列数

    int t; // 定义初始时有多少个位置为1
    cin >> t; // 输入初始时有多少个位置为1

    int a[105][105], b[105][105]; // 定义两个矩阵a和b

    // 输入初始位置为1的坐标
    for (int i = 1; i <= t; i++)
    {
        int x, y;
        cin >> x >> y;
        a[x][y] = 1; // 将指定位置置为1
    }

    int k; // 定义迭代次数
    cin >> k; // 输入迭代次数

    while (k--)
    {
        // 更新矩阵b
        for (int i = 1; i <= n; i++)
        {
            for (int j = 1; j <= m; j++)
            {
                if (a[i][j])
                {
                    b[i][j] = b[i - 1][j] = b[i][j - 1] = b[i][j + 1] = b[i + 1][j] = 1;
                }
            }
        }

        // 更新矩阵a
        for (int i = 1; i <= n; i++)
        {
            for (int j = 1; j <= m; j++)
            {
                a[i][j] = b[i][j];
            }
        }
    }

    // 统计最终有多少个位置为1
    int ans = 0;
    for (int i = 1; i <= n; i++)
    {
        for (int j = 1; j <= m; j++)
        {
            if (a[i][j] == 1) ans++;
        }
    }

    // 输出最终结果
    cout << ans << endl;
    return 0;
}

 特别注意:数组从a[1][1]开始传入,i=0和j=0的位置空出,即使更新的时候溢出规定范围也没关系,注意统计时的边界就行。

 练习3:回文日期

3.回文日期 - 蓝桥云课 (lanqiao.cn)

思路和代码:

#include<bits/stdc++.h>
using namespace std;

// 判断是否为闰年
bool isleap(int y)
{
    return (y % 4 == 0 && y % 100 != 0) || (y % 400 == 0);
}

// 检查日期是否合法
bool check(int year, int month, int day)
{
    if (month > 12 || month == 0) return false;
    if (month == 2)
    {
        if (isleap(year) && day > 29) return false;
        if (!isleap(year) && day > 28) return false;
    }
    if (day > 31) return false;
    if (month == 4 || month == 6 || month == 9 || month == 11)
    {
        if (day > 30) return false;
    }
    return true;
}

int main()
{
    int n;
    cin >> n;
    int a, b, c, d, e, f, g, h;
    int year, month, day;
    bool flag = false;
    for (int i = n + 1; i <= 99999999; i++)
    {
        year = i / 10000;
        month = (i % 10000) / 100;
        day = i % 100;
        a = i % 10;
        b = (i / 10) % 10;
        c = (i / 100) % 10;
        d = (i / 1000) % 10;
        e = (i / 10000) % 10;
        f = (i / 100000) % 10;
        g = (i / 1000000) % 10;
        h = (i / 10000000) % 10;
        if (a == h && b == g && c == f && d == e && flag == false)
        {
            if (check(year, month, day))
            {
                cout << i << endl;
                flag = true;
            }
        }
        if (a == h && b == g && c == f && d == e && a == c && b == d)
        {
            if (check(year, month, day))
            {
                cout << i << endl;
                break;
            }
        }
    }
    return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

软考-中级-系统集成2023年综合知识(一)

&#x1f339;作者主页&#xff1a;青花锁 &#x1f339;简介&#xff1a;Java领域优质创作者&#x1f3c6;、Java微服务架构公号作者&#x1f604; &#x1f339;简历模板、学习资料、面试题库、技术互助 &#x1f339;文末获取联系方式 &#x1f4dd; 软考中级专栏回顾 专栏…

adb-连接模拟器和真机操作

目录 1. 连接模拟器&#xff08;夜神模拟器示例&#xff09; 1.1 启动并连接模拟器 1.2 开启调试模式 2. USB连接真机调试 2.1 usb数据线连接好电脑&#xff0c;手机打开调试模式 2.2 输入adb devices检测手机 3. Wifi连接真机调试 3.1 USB连接手机和电脑 3.2 运行 adb…

世界顶级名校计算机专业学习使用教材汇总

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-IauYk2cGjEyljid0 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…

第四十一回 还道村受三卷天书 宋公明遇九天玄女-python创建临时文件和文件夹

宋江想回家请老父亲上山&#xff0c;晁盖说过几天带领山寨人马一起去。宋江还是坚持一个人去。 宋江到了宋家村&#xff0c;被两个都头和捕快们追捕&#xff0c;慌不择路&#xff0c;躲进了一所古庙。一会儿&#xff0c;听见有人说&#xff1a;小童奉娘娘法旨&#xff0c;请星主…

深度学习神经网络实战:多层感知机,手写数字识别

目的 利用tensorflow.js训练模型&#xff0c;搭建神经网络模型&#xff0c;完成手写数字识别 设计 简单三层神经网络 输入层 28*28个神经原&#xff0c;代表每一张手写数字图片的灰度隐藏层 100个神经原输出层 -10个神经原&#xff0c;分别代表10个数字 代码 // 导入 Ten…

基于FPGA的I2C接口控制器(包含单字节和多字节读写)

1、概括 前文对IIC的时序做了详细的讲解&#xff0c;还有不懂的可以获取TI的IIC数据手册查看原理。通过手册需要知道的是IIC读、写数据都是以字节为单位&#xff0c;每次操作后接收方都需要进行应答。主机向从机写入数据后&#xff0c;从机接收数据&#xff0c;需要把总线拉低来…

CSP-J 2023 T3 一元二次方程

文章目录 题目题目背景题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示 题目传送门题解思路总代码 提交结果尾声 题目 题目背景 众所周知&#xff0c;对一元二次方程 a x 2 b x c 0 , ( a ≠ 0 ) ax ^ 2 bx c 0, (a \neq 0) ax2bxc0,(a0)&#xff0c;可…

收单外包机构备案2023年回顾和2024年展望

孟凡富 本文原标题为聚合支付深度复盘与展望&#xff0c;首发于《支付百科》公众号&#xff01; 收单外包服务机构在我国支付收单市场中占据着举足轻重的地位&#xff0c;其规模在政策引导和市场需求驱动下不断扩大。同时&#xff0c;随着行业自律管理体系的持续发展和完善&a…

pycharm 远程运行报错 Failed to prepare environment

什么也没动的情况下&#xff0c;远程连接后运行是没问题的&#xff0c;突然在运行时就运行不了了&#xff0c;解决方案 清理缓存&#xff1a; 有时候 PyCharm 的内部缓存可能出现问题&#xff0c;可以尝试清除缓存&#xff08;File > Invalidate Caches / Restart&#xff0…

通俗理解Kotlin及其30大特性

通俗理解Kotlin及其30大特性 文章目录 通俗理解Kotlin及其30大特性前言背景编译&运行字节码对比 Java VS Kotlin变量/常量类型声明变量初始化空安全特性 函数函数声明函数参数函数可变参数局部函数函数/属性/操作符的扩展函数/属性的引用操作符重载Lambda 表达式数组/List/…

css中选择器的优先级

CSS 的优先级是由选择器的特指度&#xff08;Specificity&#xff09;和重要性&#xff08;Importance&#xff09;决定的&#xff0c;以下是优先级规则&#xff1a; 特指度&#xff1a; ID 选择器 (#id): 每个ID选择器计为100。 类选择器 (.class)、属性选择器 ([attr]) 和伪…

一个服务器实现本机服务互联网化

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 一个服务器实现本机服务互联网化 前言痛点关于中微子代理实战演练搭建服务端搭建客户端服务端配置代理实现 前言 在数字世界的网络战场上&#xff0c;中微子代理就像是一支潜伏在黑暗中的数字特工队&…

PacketSender-用于发送/接收 TCP、UDP、SSL、HTTP 的网络实用程序

PacketSender-用于发送/接收 TCP、UDP、SSL、HTTP 的网络实用程序 PacketSender是一款开源的用于发送/接收 TCP、UDP、SSL、HTTP 的网络实用程序&#xff0c;作者为dannagle。 其官网地址为&#xff1a;https://packetsender.com/&#xff0c;Github源代码地址&#xff1a;htt…

Java 事件处理机制

一、快速入门 import javax.swing.*; import java.awt.*; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.awt.event.MouseListener; import java.awt.event.WindowListener;public class BallMove extends JFrame { //窗口MyPanel mp null…

一款高输出电流 PWM 转换器

一、产品描述 TPS543x 是一款高输出电流 PWM 转换器&#xff0c;集成了低电阻、高侧 N 沟道 MOSFET。具有所列的特性的基板上还包括高性能电压误差放大器&#xff08;可在瞬态条件下提供高稳压精度&#xff09;、欠压锁定电路&#xff08;用于防止在输入电压达到 5.5V 前启动&…

Py之ydata-profilin:ydata-profiling的简介、安装、使用方法之详细攻略

Py之ydata-profilin&#xff1a;ydata-profiling的简介、安装、使用方法之详细攻略 目录 ydata-profiling的简介 1、主要特点 2、案例应用 (1)、比较数据集、对时序数据集进行分析、对大型数据集进行分析、处理敏感数据、数据集元数据和数据字典、自定义报告的外观、不同类型…

【MATLAB源码-第144期】基于matlab的蝴蝶优化算法(BOA)无人机三维路径规划,输出做短路径图和适应度曲线。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 ​蝴蝶优化算法&#xff08;Butterfly Optimization Algorithm, BOA&#xff09;是基于蝴蝶觅食行为的一种新颖的群体智能算法。它通过模拟蝴蝶个体在寻找食物过程中的嗅觉导向行为以及随机飞行行为&#xff0c;来探索解空间…

使用两个队列实现栈

在计算机科学中&#xff0c;栈是一种数据结构&#xff0c;它遵循后进先出&#xff08;LIFO&#xff09;的原则。这意味着最后一个被添加到栈的元素将是第一个被移除的元素。然而&#xff0c;Java的标准库并没有提供栈的实现&#xff0c;但我们可以使用两个队列来模拟一个栈的行…

十五、随机数和随机颜色

项目功能实现&#xff1a;在原图上进行每隔0.5s随机绘制不同长度不同颜色的线段(保存之前的线段)&#xff0c;在另一个画布上进行绘制随机不同长度不同颜色的线段(不保存之前的线段) 按照之前的博文结构来&#xff0c;这里就不在赘述了 一、头文件 random.h #pragma once#i…

Fiddler工具 — 19.Fiddler抓包HTTPS请求(二)

5、查看证书是否安装成功 方式一&#xff1a; 点击Tools菜单 —> Options... —> HTTPS —> Actions 选择第三项&#xff1a;Open Windows Certificate Manager打开Windows证书管理器。 打开Windows证书管理器&#xff0c;选择操作—>查看证书&#xff0c;在搜索…