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;
}

相关推荐

  1. BASIC-22 基础练习 FJ字符串

    2024-02-23 12:42:03       13 阅读
  2. 练习-简单2

    2024-02-23 12:42:03       28 阅读
  3. 算法基础(38)c++ STL

    2024-02-23 12:42:03       17 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-02-23 12:42:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-23 12:42:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-23 12:42:03       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-23 12:42:03       20 阅读

热门阅读

  1. Linux下各种压缩包的压缩与解压

    2024-02-23 12:42:03       27 阅读
  2. 【springBoot】统一功能处理

    2024-02-23 12:42:03       24 阅读
  3. TensorFlow基础

    2024-02-23 12:42:03       28 阅读
  4. Putty中运行matlab文件

    2024-02-23 12:42:03       33 阅读
  5. 如何成为软件测试工程师——理论知识篇

    2024-02-23 12:42:03       34 阅读
  6. 低代码开发应对AI时代到来的挑战与机遇

    2024-02-23 12:42:03       36 阅读
  7. vue中组件之间的通信方式有多少种

    2024-02-23 12:42:03       34 阅读
  8. R语言数据分析(四)

    2024-02-23 12:42:03       32 阅读
  9. MAST20005 R Statistics

    2024-02-23 12:42:03       24 阅读
  10. 【软考】传输层协议之UDP

    2024-02-23 12:42:03       27 阅读
  11. R语言【base】——scan():读取数据值

    2024-02-23 12:42:03       28 阅读
  12. 云计算面试题【后期】

    2024-02-23 12:42:03       29 阅读