算法基础——模拟

news2025/3/31 11:26:45

目录

1 多项式输出

2.蛇形方阵

3.字符串的展开


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

1 多项式输出

题⽬来源: 洛⾕

题⽬链接:P1067 [NOIP2009 普及组] 多项式输出

难度系数: ★

[解法]

根据题意模拟+分类讨论(分的越详细,越不会出现bug):

仅需按照顺序,考虑每⼀项的三件事情:符号 + 系数 + 次数。 

处理「符号」:

  1. 负数:直接输出
  2. 正数:(1) 是第n项,不输出+ (2)其余情况,直接输出+

处理「系数」:

  • 先取绝对值:

                (1)不是1,直接输出

                (2)是1

                        末项 - 需要输出

                        不是末项 - 不需要输出

处理「次数」:

  • 次数为 1 ,输出 "x";
  • 次数为0 ,什么也不输出

  • 其他 ,输出 "x^" + 对应的次数;

【参考代码】

#include<iostream>
#include<cmath>
using namespace std;

int main(){
	int n;cin >> n;
	
	//循环次数 
	for(int i = n;i >= 0;i--){
		int op;cin >> op;
		if(op == 0) continue;//出来系数为0的情况 
		
		//1.符号 
		if(op < 0) cout << "-";
		else{
			if(i != n) cout << "+";
		} 
		
		//2.系数
		int a = abs(op);
		if(a != 1 || (a==1 && i== 0)) cout << a;
		
		
		//3.次数
		if(i == 1)cout << "x";
		else if(i == 0) ;
		else{
			cout << "x^" << i;
		} 
	}
	return 0;
}

2.蛇形方阵

题⽬来源: 洛⾕

题⽬链接:P5731 【深基5.习6】蛇形⽅阵

难度系数: ★

[解法]

模拟填数的过程。(实现的方式有很多种)

在⼀个矩阵中按照⼀定规律填数的通用解法

  1. 定义方向向量

             比如本题⼀共四个方向,分别是右、下、左、上,对应: (0, 1)、(1, 0)、(0, -1)、(-1, 0)

           

            遇到其他类型的题只需要更改方向向量即可;

     2.根据规则结合方向向量填数

            (1) 朝⼀个方向⾛,⼀边走⼀边填数,直到越界;

            (2) 越界之后,结合定义的方向向量,求出下⼀轮应该⾛的方向以及应该到达的正确

                        位置;

            (3)重复上述过程,直到把所有的数填完为止;

【参考代码】

#include<iostream>
using namespace std;

const int N = 15;

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

int arr[N][N];

int main(){
	int n;cin >> n;
	
	//模拟填数过程 
	int cet = 1; //当前位置要填的数 
	int x = 1,y = 1;//初始位置 
	int pos = 0;//当前的方向 
	
	while(cet <= n*n){
		arr[x][y] = cet;
		//计算下一个位置 
		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];
		}
		
		cet++;
		x = a;y = b;
	} 
	
	for(int i = 1;i <= n;i++){
		for(int j = 1;j <= n;j++){
			printf("%3d",arr[i][j]);
		}
		printf("\n");
	}
	return 0;
}

3.字符串的展开

题⽬来源: 洛谷

题⽬链接: P1098 [NOIP2007 提⾼组] 字符串的展开

难度系数: ★

【解法】

纯代码题 - 考察代码能力 :>

【参考代码】

#include<iostream>
#include<algorithm>
using namespace std;

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

//判断是否是数字字符 
bool isdig(char ch){
	return ch >= '0' && ch <= '9';;
}

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

//展开 把(left,right)之间的字符展开 
void add(char l,char r){
	string t;
	//遍历中间的字符
	for(char ch = l + 1;ch < r;ch++){
		char tmp = ch;
		
		//处理p1 
		if(p1 == 2 && islet(tmp)) tmp -= 32; //小写变大写 
		else if(p1 == 3) tmp = '*';//变成星号 
		
		//处理p2 
		for(int i = 1;i <= p2;i++){
			t += tmp;
		}
	}
	//处理p3 
	if(p3 == 2) reverse(t.begin(),t.end());
		
	ret += t; 
}
int main(){
	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) && left < right) 
			|| (islet(left) && islet(right) && left < right))
			{
				//展开
				add(left,right); 
			}
			else
			{
				ret += ch; 
			}
		}
	}
	cout << ret << endl;
	return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【第30节】MFC编程:ListCtrl控件和TreeCtrl控件

目录 引言 一、高级控件ListCtrl 二、高级控件TreeCtrl 三、Shell控件 四、CImageList 五、综合代码示例 引言 在MFC编程里&#xff0c;高级控件能大幅提升应用程序的交互性与功能性。接下来&#xff0c;咱们会详细讲讲ListCtrl和TreeCtrl这两个高级控件。不仅会介绍它们…

JavaScript 手写 call、apply、bind 和 new

1. 手写 call 方法 核心思路&#xff1a;改变函数的 this 指向并立即执行&#xff0c;通过将函数临时挂载到目标对象上调用。 Function.prototype.myCall function (context, ...args) {// 如果 context 为 null 或 undefined&#xff0c;则默认为 windowcontext context |…

计算机网络基础:量子通信技术在网络中的应用前景

计算机网络基础:量子通信技术在网络中的应用前景 一、前言二、量子通信技术基础2.1 量子通信的基本概念2.2 量子通信的主要原理2.2.1 量子密钥分发(QKD)原理2.2.2 量子隐形传态原理三、量子通信技术的特点3.1 绝对安全性3.2 超高通信速率潜力3.3 抗干扰能力强四、量子通信技…

Postman 下载文件指南:如何请求 Excel/PDF 文件?

在 Postman 中进行 Excel/PDF 文件的请求下载和导出&#xff0c;以下是简明的步骤&#xff0c;帮助你轻松完成任务。首先&#xff0c;我们将从新建接口开始&#xff0c;逐步引导你完成整个过程。 Postman 请求下载/导出 excel/pdf 文件教程

Stereolabs ZED Box Mini:机器人与自动化领域的人工智能视觉新选择

在人工智能视觉技术快速发展的今天&#xff0c;其应用场景正在持续拓宽&#xff0c;从智能安防到工业自动化&#xff0c;从机器人技术到智能交通&#xff0c;各领域都在积极探索如何利用这一先进技术。而 Stereolabs 推出的ZED Box Mini&#xff0c;正是一款专为满足这些多样化…

arm之s3c2440的I2C的用法

基础概念 IC&#xff08;Inter-Integrated Circuit&#xff09;又称I2C&#xff0c;是是IICBus简称&#xff0c;所以中文应该叫集成电路总线。 IIC的总线的使用场景&#xff0c;所有挂载在IIC总线上的设备都有两根信号线&#xff0c;一根是数据线SDA&#xff0c;另一 根是时钟…

redis部署架构

一.redis多实例 如上图所示&#xff0c;我们经常使用实例的端口号来作为实例的安装目录名称。 1.创建实例安装目录 如上图所示&#xff0c;这是创建实例的安装目录&#xff0c; 2.拷贝实例的配置文件 如上图所示&#xff0c;将redis解压目录下的配置文件拷贝到对应的conf目录…

深入理解指针(4)(C语言版)

文章目录 前言一、回调函数是什么&#xff08;一&#xff09;定义&#xff08;二&#xff09;工作原理&#xff08;三&#xff09;应用场景 二、qsort举例&#xff08;一&#xff09;qsort函数简介&#xff08;二&#xff09;比较函数的定义&#xff08;三&#xff09;使用示例…

【HTML】验证与调试工具

个人主页&#xff1a;Guiat 归属专栏&#xff1a;HTML CSS JavaScript 文章目录 1. HTML 验证工具概述1.1 验证的重要性1.2 常见 HTML 错误类型 2. W3C 验证服务2.1 W3C Markup Validation Service2.2 使用 W3C 验证器2.3 验证结果解读 3. 浏览器开发者工具3.1 Chrome DevTools…

​​SenseGlove与Aeon Robotics携手推出HEART项目,助力机器人培训迈向新台阶

在自动化和机器人技术快速发展的今天&#xff0c;SenseGlove和Aeon Robotics联合推出了一项创新项目——HEART项目。该项目在欧盟资助的MasterXR框架内展开&#xff0c;旨在通过整合虚拟现实&#xff08;VR&#xff09;、力反馈触觉手套&#xff08;SenseGlove项目Rembrandt&am…

mapbox进阶,仿照百度,加载marker点位,移入marker点切换图标,点击展示气泡,气泡和marker联动

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:mapbox 从入门到精通 文章目录 一、🍀前言1.1 ☘️mapboxgl.Map 地图对象1.2 ☘️mapboxgl.Map style属性1.3 ☘️marker 标注点位 api1.3.1 ☘️构造函数…

使用HTML5和CSS3实现3D旋转相册效果

使用HTML5和CSS3实现3D旋转相册效果 这里写目录标题 使用HTML5和CSS3实现3D旋转相册效果项目介绍技术栈核心功能实现思路1. HTML结构2. CSS样式解析2.1 基础样式设置2.2 3D效果核心样式2.3 卡片样式 3. JavaScript交互实现3.1 旋转控制3.2 自动播放功能 技术要点总结项目亮点总…

游戏引擎学习第186天

回顾并规划今天的任务 现在&#xff0c;我们站在了一个关键的时刻&#xff0c;准备突破&#xff0c;拥有一些优秀的性能分析代码。从目前来看&#xff0c;我们已经能够看到时间的消耗情况&#xff0c;我对这一点感到非常兴奋。昨天的直播中我们勉强让一些东西工作了&#xff0…

【redis】持久化之RDB与AOF

在数字世界的脉搏中&#xff0c;数据是流淌的血液&#xff0c;而持久化则是保障系统生命力的核心机制。作为内存数据库的标杆&#xff0c;Redis凭借其高性能特性成为互联网架构的基石&#xff0c;但其「易失性」的天然属性也催生了关键命题&#xff1a;如何在服务重启或故障时保…

Brainstorm绘制功能连接图(matlab)

上篇笔记简单介绍了Brainstorm&#xff0c;本次使用Brainstorm绘制功能连接图。而对于连接矩阵&#xff0c;软件中有几种方法&#xff1a;相关、相干、双变量格兰杰因果关系、相位锁相值、包络相关、相位转移熵。 首先&#xff0c;对数据进行预处理&#xff0c;保存为.set&…

华为HG532路由器RCE漏洞 CVE-2017-17215 复现

华为HG532路由器RCE漏洞 CVE-2017-17215 CVE-Description Huawei HG532 with some customized versions has a remote code execution vulnerability. An authenticated attacker could send malicious packets to port 37215 to launch attacks. Successful exploit could l…

LVS的三种工作模式简述

一、引言 在过去的十几年中&#xff0c;Internet从几个研究机构相连为信息共享的网络发展成为拥有大量应用和服务的全球性网络&#xff0c;它正成为人们生活中不可缺少的 一部分。虽然Internet发展速度很快&#xff0c;但建设和维护大型网络服务依然是一项挑战性的任务&#xf…

使用 Layers 扩展你的 Nuxt4 应用

面对一个臃肿的页面或项目&#xff0c;你会如何简化重构、扩展它&#xff1f; 当单个 Vue 文件中界面/业务足够多时&#xff0c;通常我们会把它拆分成多个 components 或 composables 来引入&#xff0c;以此来减少此文件复杂度和增加可维护性。 当一个项目的界面/业务逻辑足…

Excel处理控件Aspose.Cells指南:如何在不使用 Microsoft Excel 的情况下解锁 Excel 工作表

Microsoft Excel 允许用户使用密码保护工作表&#xff0c;以防止未经授权的更改。但是&#xff0c;在某些情况下&#xff0c;您可能需要在不使用 Microsoft Excel 的情况下解锁 Excel 工作表。在本指南中&#xff0c;我们将探讨解锁 Excel 工作表的不同方法&#xff0c;例如使用…

进军场景智能体,云迹机器人又快了一步

&#xff08;图片来源&#xff1a;Pixels&#xff09; 2025年&#xff0c;AI和机器人行业都发生了巨大改变。 数科星球原创 作者丨苑晶 编辑丨大兔 2025年&#xff0c;酒店行业正掀起一股批量采购具备AI功能的软硬一体解决方案的热潮。 在DeepSeek、Manus等国产AI软件的推动…