算法基础篇--模拟

news/2025/2/26 14:43:28

模拟

模拟的含义

模拟, 顾名思义就是题目让你干什么,你就干什么。考察的是将思路转化成代码的代码能⼒。这类题⼀般较为简单,属于竞赛⾥⾯的签到题(但是,万事⽆绝对,也有可能会出现让⼈⾮常难受的模拟题),我们在学习语法阶段接触的题,⼤多数都属于模拟题。

现在我们就通过下面的几道题目来了解一下模拟的特点:

1. 多项式输出

题目来源:洛谷

题目链接: 多项式输出

题目就是下面的样子:
在这里插入图片描述

模拟题没有什么可以详细讲解的思路,大家直接看地阿妈就可以搞懂这道题目的实现思路是什么。

#include<iostream>

using namespace std;
int n;
const int N = 105;
int a[N];
int main()
{
    cin >> n;
    for (int i = n; i >= 0; i--) cin >> a[i];
    for (int i = n; i >= 0; i--)
    {
        if (a[i] == 0) continue;
        if (a[i] < 0) cout << '-';
        else if (i != n && a[i] > 0) cout << '+'; 
        if (abs(a[i]) != 1 || i == 0)
        cout << abs(a[i]);
        if (i == 0) continue;
        else if (i == 1) cout << 'x';
        else cout << "x^" << i;
    }
    return 0;
}

2. 蛇形方阵

题目来源:洛谷
题目链接: 蛇形方阵
题意大致如下:

这道题目就是要求我们用正确的规则正确完成填表的任务。
这里使用的都是简单的语法,同时思路也十分的简单,知识需要大家将这个问题给看懂。
这里我就直接先展示相应的代码,再来讲解相关的原理思路。

#include <iostream>

using namespace std;
const int N = 15;
int a[N][N];
// zdl:: 定义方向矢量
int dy[] = {1, 0, -1, 0};
int dx[] = {0, 1, 0, -1};
int main()
{
    int n;
    cin >> n;
    int cnt = 1;
    int pos = 0;
    // zdl:: 起始坐标
    int i = 1, j = 1;
    a[i][j] = cnt++;
    while (cnt <= n * n)
    {

        int x = i + dx[pos], y = j + dy[pos];
        if (x > n || x < 1 || y > n || y < 1 || a[x][y])
        {
            pos = (pos + 1) % 4;
            x = i + dx[pos], y = j + dy[pos];
        }
        i = x; j = y;
        a[i][j] = cnt++;
    }
    for (int i = 1; i <= n; i++)
    {
        for (int j = 1; j <= n; j++)
        {
            printf("%3d", a[i][j]);
        }
        cout << endl;
    }
    return 0;
}

上面的代码就可以解决问题。这里我就解释一些解题的思路。

  1. 我们需要正确的定义方向向量在题目中,我们就是在 在遇到越界访问和已经填好的格子此时就需要我们进行转向;转向就是从上下左右这四个方向的点坐标进行分析的
(x - 1, y - 1)(x - 1, y)(x - 1, y + 1)
(x, y - 1)(x, y)(x, y + 1)
(x + 1, y - 1)(x + 1, y)(x + 1, y + 1)

从上面的表格就可以很直观的看出关于方向向量的使用规则,以后在进行BFS(宽度优先遍历)的学习时,我们就会使用到8个方向遍历的情况。

  1. 在走到一个越界的格子或者是一个已经填好数字的格子时,我们就会调转方向,在定义方向向量时,我们就要将方向向量的移动顺序确定,pos = (pos + 1) % 4 就是在移动方向确定好之后,简单的调转方向的方法

3. 字符串的展开

题目来源:洛谷
题目链接:字符串展开
题目详情:

我们还是先来看代码:

#include <iostream>
#include <algorithm>
#include <string>
#include <cctype>
using namespace std;
string ret;
int main()
{
    int p1, p2, p3;
    string s;
    cin >> p1 >> p2 >> p3 >> s;
    int n = s.size();
    for (int i = 0; i < n; i++)
    {
        char ch = s[i];
        if (ch != '-')
            ret += ch;
        else if (ch == '-')
        {
            char prev = s[i - 1], next = s[i + 1];
            if (next <= prev)
            {
                ret += '-';
                continue;
            }
            string tmp;
            if (isdigit(prev) && isdigit(next) && next > prev || isalpha(prev) && isalpha(next) && next > prev)
            {
                for (char i = prev + 1; i < next; i++)
                    tmp += string(p2, i);
                if (p1 == 2 && !isdigit(tmp[0]))
                    for (auto &ch : tmp)
                        ch = toupper(ch);
                else if (p1 == 3)
                    for (auto &ch : tmp)
                        ch = '*';
                if (p3 == 2)
                    reverse(tmp.begin(), tmp.end());
            }
            else{
                ret += ch;
            }
            ret += tmp;
        }
    }
    cout << ret << endl;
    return 0;
}

这道题目的题意十分的简单,重要的是大家不要被题目给饶了进去,可以在草稿本是哪个理清思路再开始写代码。

好了,模拟这一个小结,我们就先练习这三道题目。大家一定要敢于尝试,努力锻炼自己的代码能力。
咱们下期再见,拜拜!!🌈🌈✈️


http://www.niftyadmin.cn/n/5868838.html

相关文章

MailKit: 在 .NET 中实现高效电子邮件发送与接收

在现代应用程序中&#xff0c;电子邮件仍然是重要的通讯方式之一。无论是个人应用程序还是企业级系统&#xff0c;邮件发送和接收功能都经常是必不可少的。本文将介绍如何使用 MailKit 这个强大的 .NET 库来实现发送和接收电子邮件的功能。 简介 MailKit 是一个跨平台的 .NET…

python实现基于文心一言大模型的sql小工具

一、准备工作 注册与登录&#xff1a; 登录百度智能云千帆控制台&#xff0c;注册并登录您的账号。 创建千帆应用&#xff1a; 根据实际需求创建千帆应用。创建成功后&#xff0c;获取AppID、API Key、Secret Key等信息。如果已有千帆应用&#xff0c;可以直接查看已有应用的AP…

在Spring Boot+Vue前后端分离的项目中使用JWT实现基本的权限校验

说明 在 Spring Boot + Vue 前后端分离的项目中,如果不使用第三方服务(如 Spring Security、Shiro 等),可以通过自定义实现基本的权限校验。 使用JWT实现步骤 以下是实现步骤: 1. 设计权限模型 通常权限模型包括: 用户(User):系统的使用者。角色(Role):用户的权…

WordPress Course Booking System SQL注入漏洞复现 (CVE-2025-22785)(附脚本)

免责申明: 本文所描述的漏洞及其复现步骤仅供网络安全研究与教育目的使用。任何人不得将本文提供的信息用于非法目的或未经授权的系统测试。作者不对任何由于使用本文信息而导致的直接或间接损害承担责任。如涉及侵权,请及时与我们联系,我们将尽快处理并删除相关内容。 0x0…

三角函数和差角公式对于任意角的证明(代数法)

前置知识&#xff1a;平面向量、诱导公式 和差角公式的证明如下&#xff1a; ​ 对于每个始边为 x x x 轴正半轴的角 θ \theta θ &#xff0c;令平面向量 a ⃗ θ \vec a_{\theta} a θ​ 是 x O y xOy xOy 中&#xff0c;以 O O O 为起点&#xff0c;方向沿着的 θ …

FS800DTU联动OneNET平台数据可视化View

目录 1 前言 2 环境搭建 2.1 硬件准备 2.2 软件环境 2.3 硬件连接 3 注册OneNET云平台并建立物模型 3.1 参数获取 3.2 连接OneNET 3.3上报数据 4 数据可视化View 4.1 用户信息获取 4.2 启用数据可视化View 4.3 创建项目 4.4 编辑项目 4.5 新增数据源 4.6 数据过滤器配置 4.6 项…

QT入门--QMainWindow

从上向下依次是菜单栏&#xff0c;工具栏&#xff0c;铆接部件&#xff08;浮动窗口&#xff09;&#xff0c;状态栏&#xff0c;中心部件 菜单栏 创建菜单栏 QMenuBar* mybar1 menuBar(); 将菜单栏放到窗口中 setMenuBar(mybar1); 创建菜单 QMenu *myfilemenu mybar1-…

HTTP/HTTPS 服务端口监测的简易实现

一 HTTP/HTTPS 服务端口监测的简易实现方法 在当今快节奏的工作环境中&#xff0c;工作忙碌成为了许多职场人的常态。就拿我们团队最近经历的事情来说&#xff0c;工作任务一个接一个&#xff0c;大家都在各自的岗位上争分夺秒地忙碌着。然而&#xff0c;就在这样高强度的工作…