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

NO.56|基础算法-模拟|多项式输出|蛇形方阵|字符串的展开|方向向量(C++)

模拟

模拟,顾名思义,就是题⽬让你做什么你就做什么,考察的是将思路转化成代码的代码能⼒

P1067 [NOIP 2009 普及组] 多项式输出 - 洛谷

模拟+分类讨论,对于⼀元n次⽅程的的最终结果,我们仅需按照顺序,考虑每⼀项的三件事情:符号+系数+次数。

  • 处理「符号」:
    • 如果系数⼩于0 ,直接输出"-";
    • 如果系数⼤于0 ,除了⾸项不输出"+“,其余全部输出”+"
  • 处理「系数」:
    • 先取⼀个绝对值,因为正负的问题已经处理过了;
    • 当系数不等于1 ,直接输出这个数;
    • 但是当系数为1 ,且是最后⼀项的时候,这个1也是需要输出的;其余情况下的1不需要输出。
  • 处理「次数」:
    • 次数⼤于1 ,输出"x^"+对应的次数;
    • 次数等于1 ,输出"x";
    • 次数⼩于1 ,什么也不输出。
#include <bits/stdc++.h>
using namespace std;

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);

    int n; cin >> n;
    for (int i = n; i >= 0; i--)
    {
        int a; cin >> a;
        if (a == 0) continue;
        if (a < 0) cout << '-';
        else
        {
            if (i != n) cout << '+';
        }

        a = abs(a);
        if (a != 1 || (a == 1 && i == 0)) cout << a;

        if (i == 0) continue;
        else if (i == 1) cout << 'x';
        else cout << "x^" << i;
    }
        
    return 0;
}
P5731 【深基5.习6】蛇形方阵 - 洛谷

在这里插入图片描述

模拟填数的过程。
在⼀个矩阵中按照⼀定规律填数的通⽤解法:

  • 定义⽅向向量,⽐如本题⼀共四个⽅向,分别是右、下、左、上,对应:(0, 1)、(1, 0)、(0, -1)、(-1, 0)
  • 循环填数的规则:
    • 朝⼀个⽅向⾛,⼀边⾛⼀边填数,直到越界;
    • 越界之后,结合定义的⽅向向量,求出下⼀轮应该⾛的⽅向以及应该到达的正确位置;
    • 重复上述过程,直到把所有的数填完为⽌。
#include <bits/stdc++.h>
using namespace std;

const int N = 15;

// 定义右下左上四个方向
int dx[] = {0, 1, 0, -1};
int dy[] = {1, 0, -1, 0};

int arr[N][N];

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);

    int n; cin >> n;

    //模拟填数过程
    int x = 1, y = 1;//初始位置
    int cnt = 1;     //当前位置要填的数
    int pos = 0;     //当前的方向
    
    while (cnt <= n * n)
    {
        arr[x][y] = cnt;
        //计算下一个位置
        int a = x + dx[pos], b = y + dy[pos];
        //判断是否越界
        if (a < 1 || a > n || b < 1 || b > n || arr[a][b])
        {
            //更新出正确的该走的位置
            pos = (pos + 1) % 4;
            a = x + dx[pos], b = y + dy[pos];
        }
        x = a, y = b;
        cnt++;
    }
    for (int i = 1; i <= n; i++)
    {
        for (int j = 1; j <= n; j++)
        {
            printf("%3d", arr[i][j]);        
        }
        puts("");
    }
    
    return 0;
}
P1098 [NOIP 2007 提高组] 字符串的展开 - 洛谷
#include <bits/stdc++.h>
using namespace std;

int p1, p2, p3, n;
string s;
string ret;

//判断是否是数字
bool isdig(char ch)
{
    return ch >= '0' && ch <= '9';
}
//判断是否是小写字母
bool islet(char ch)
{
    return ch >= 'a' && ch <= 'z';
}

//把left和right之间的字符展开
void add(char left, char right)
{
    string t;
    for (char ch = left + 1; ch < right; ch++)
    {
        char tmp = ch;
        //处理p1
        if (p1 == 2 && islet(tmp)) tmp -= 32;
        else if (p1 == 3) tmp = '*';

        //处理p2
        for (int i = 0; i < p2; i++)
        {
            t += tmp;        
        }
    }

    //处理p3
    if (p3 == 2) reverse(t.begin(), t.end());

    ret += t;
}

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);

    cin >> p1 >> p2 >> p3 >> s;
    n = s.size();

    for (int i = 0; i < n; i++)
    {
        char ch = s[i];

        if (s[i] != '-' || i == 0 || i == n - 1) ret += ch;
        else
        {
            char left = s[i - 1], right = s[i + 1];
            // 判断是否展开
            if (isdig(left) && isdig(right) && right > left || 
                islet(left) && islet(right) && right > left)
            {
                add(left, right);
            }
            else
            {
                ret += ch;
            }
        }
    }
    cout << ret << endl;
    
    return 0;
}

http://www.kler.cn/a/599955.html

相关文章:

  • 《HarmonyOS Next自定义TabBar页签凸起和凹陷案例与代码》
  • 蓝桥杯—草坪(模拟+bfs分层处理)
  • 【计算机网络运输层详解】
  • 常见框架漏洞—Spring
  • 深度学习篇---PaddleDetectionPaddleOCR
  • 《AI大模型趣味实战 》第7集:多端适配 个人新闻头条 基于大模型和RSS聚合打造个人新闻电台(Flask WEB版) 1
  • Spring Boot - 动态编译 Java 类并实现热加载
  • 自动驾驶背后的数学:ReLU,Sigmoid, Leaky ReLU, PReLU,Swish等激活函数解析
  • 深度强化学习中的深度神经网络优化策略:挑战与解决方案
  • Spring Boot 一个接口实现任意表的 Excel 导入导出
  • Unity图形学Shader快速回顾
  • 如何从后端实现页面跳转?
  • 【区块链通用服务平台及组件】绿信链 | FISCO BCOS 应用案例
  • Python(4)Python函数编程性能优化全指南:从基础语法到并发调优
  • 数据结构---最小生成树
  • 3.23学习总结
  • C#基础学习(四)笑谈C#函数:从“Hello World”到“千变万化”的奇幻之旅
  • Delta Lake 解析:架构、数据处理流程与最佳实践
  • Flink 自定义数据源:从理论到实践的全方位指南
  • 【C++】继承机制:从基础到避坑详细解说