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

算法基础篇(2)模拟

模拟,顾名思义,就是题目让你做什么你就做什么,考查的是将思路转换为代码的能力。这类题通常较为简单,属于竞赛里面的签到题,我们在学习语法阶段接触的题大多数都属于模拟题。

1、多项式输出

算法原理:根据题目模拟 + 分类讨论

如果我们单独看这个多项式其中一项的话,我们会发现这一项可以分成三个部分:系数、变量x和指数,而系数又可以分为符号 + 一个数的绝对值。所以我们输出就可以一项一项地输出,每一项关心三个部分:符号、数 和 次数。

参考代码:

#define  _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
#include <cmath>
using namespace std;int main()
{int n = 0;cin >> n;for (int i = n;i >= 0;i--){int a = 0;cin >> a;//处理系数为0的情况if (a == 0)continue;//1.符号if (a < 0){cout << '-';}else{if (i != n)cout << '+';}//2.数字a = abs(a);if (a != 1)cout << a;else{if (i == 0)cout << a;}//3.次数if (i == 0)continue;else if (i == 1)cout << 'x';elsecout << "x^" << i;}return 0;
}

2、蛇形方阵

算法原理:模拟填数的过程

实现的方式有很多种,这里介绍一种通用的解法来解决矩阵中填数的题目:

①定义方向向量

②根据规则结合方向向量来填数。

参考代码:

#define  _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
#include <cstdio>
using namespace std;const int N = 10;//定义 右、下、左、上 四个方向
int dx[] = { 0,1,0,-1 };
int dy[] = { 1,0,-1,0 };int arr[N][N];int main()
{int n = 0;cin >> n;//模拟填数过程int num = 1; //当前位置要填的数int pos = 0; //当前的方向int x = 1, y = 1; //初始位置while (num <= n * n){arr[x][y] = num;//计算下一个位置int a = x + dx[pos];int 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;num++;}//输出for (int i = 1;i <= n;i++){for (int j = 1;j <= n;j++){printf("%3d", arr[i][j]);}cout << endl;}return 0;
}

3、字符串的展开

参考代码:

#define  _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;int p1, p2, p3;
string s;
string ret;//判断是否是数字字符
bool isdig(char ch)
{return ch >= '0' && ch <= '9';
}//判断是否是小写字母
bool islet(char ch)
{return ch >= 'a' && ch <= 'z';
}//把 [left, right]之间的字符 展开
//left和right 这两个字符不做处理
void add(char left, char right)
{string t;//遍历中间的字符for (char ch = left + 1;ch < right;ch++){char tmp = ch;//处理p1if (p1 == 2 && islet(ch)){tmp -= 32;//小写变大写}else if (p1 == 3){tmp = '*';//变成星号}//处理p2for (int i = 0;i < p2;i++){t += tmp;}}//处理p3if (p3 == 2){reverse(t.begin(), t.end());}ret += t;
}int main()
{cin >> p1 >> p2 >> p3;cin >> s;size_t 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];char right = s[i + 1];//判断是否展开if ((isdig(left) && isdig(right) && left < right) ||(islet(left) && islet(right) && left < right)){//展开add(left, right);}else{ret += ch;}}}cout << ret << endl;return 0;
}
http://www.dtcms.com/a/393143.html

相关文章:

  • Go基础:Go语言结构体(Struct)和接口(Interface)详解
  • 【计算机毕业设计】基于生成对抗网络的动作与表情一致性动漫角色生成算法系统​
  • html5 做个人网页识芯平夹回拼翘
  • 开收价均值策略
  • 【大模型部署】Ollama部署gguf模型
  • Coze源码分析-资源库-删除工作流-前端源码-核心组件
  • 机器学习实战第八章 降维
  • 2025年csp-j真题和解析
  • C++ STL map 深度解析:从原理到实战的全方位指南
  • 【EKF组合导航例程】MATLAB代码,15维状态量、3维观测量的组合导航,滤波使用EKF(扩展卡尔曼滤波)。附下载链接
  • word文档怎么根据大纲拆分章节
  • 【Modbus】Modbus协议基础知识详解
  • Springboot使用Integration实现MQTT发送和接收消息
  • 中国传统文化上衣下裳
  • zk管理kafkakafka-broker通信
  • 前端开发技术趋势Web Components
  • Python tarfile库详解
  • ​​[硬件电路-287]:高性能六通道数字隔离器CA-IS3763L 功能概述与管脚定义
  • 错题集系统接口文档
  • 【RAG-LLM】InfoGain-RAG基于文档信息增益的RAG
  • Browser-Use深度解析:重新定义AI与浏览器的智能协作
  • 【Mysql】事务隔离级别、索引原理、/redolog/undolog/binlog区别、主从复制原理
  • AWS 全景速查手册
  • 小米Openvela城市沙龙
  • Python数据分析:求矩阵的秩。啥是矩阵秩?听故事学线代并用Python实现,娘来太容易学会了!
  • UI Toolkit自定义元素
  • redis未授权访问-漏洞复现
  • PR调节器与PI调节器的区别
  • Unity核心概念⑫:碰撞检测
  • 【读论文】面向工业的ASR语音大模型