C++基础算法:模拟

在这里插入图片描述

文章目录

  • 1.[P1067 [NOIP 2009 普及组\] 多项式输出 - 洛谷](https://www.luogu.com.cn/problem/P1067)
    • 题目解析
    • 算法解析
    • 代码实现
  • 2.[P5731 【深基5.习6】蛇形方阵 - 洛谷](https://www.luogu.com.cn/problem/P5731)
    • 题目解析
    • 算法原理
    • 代码实现
  • 3.[P1098 [NOIP 2007 提高组\] 字符串的展开 - 洛谷](https://www.luogu.com.cn/problem/P1098)
    • 算法原理
    • 代码实现

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

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

image-20250303143631185

题目解析

这道题是简单的模拟实现题目,主要将算式通过代码来实现出来,将所有的情况分析出来,代码进行实现即可

算法解析

这道题需要细心处理分类:

分类如下:

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

对应到代码:

//处理系数 
		if(a==0) continue;
		if(a>0)
		{
			if(i!=n) cout<<'+';
		}
		else 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;

代码实现

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

int main()
{
	int n; cin>>n;
	for(int i = n;i>=0;i--)
	{
		int a; cin>>a;
		
		//处理系数 
		if(a==0) continue;
		if(a>0)
		{
			if(i!=n) cout<<'+';
		}
		else 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;
}

2.P5731 【深基5.习6】蛇形方阵 - 洛谷

image-20250303150430129

题目解析

本题是通过模拟运用数组来模拟实现蛇形方阵的题目,通过输入数据n来模拟实现要求

算法原理

对于方阵类的题目我们可以用两个直角坐标系来实现题目要求:

image-20250303163946804

这样通过数组来模拟方向我们直接可以对其进行填数

int x[] = {0,1,0,-1};
int y[] = {1,0,-1,0};
int pos;

//创建数组存放值
const int N = 10;
int ret[N][N];

int main()
{
	for(int i = 1; i<=n*n;i++)
	{
		ret[a][b] = i;
        //先判断是否越界
		int p = a + x[pos], q = b + y[pos];
		if(p>n||q>n||q<1||ret[p][q]!=0) ++pos%=4;
        //a b更正方向
		a += x[pos];
		b += y[pos];
	}
}

代码实现

#include <iostream>
using namespace std;

//通过数组来模拟行进方向 
int x[] = {0,1,0,-1};
int y[] = {1,0,-1,0};
int pos;

//创建数组存放值
const int N = 10;
int ret[N][N];

int main()
{
	int n; cin>>n;
	int a = 1, b = 1;
	for(int i = 1; i<=n*n;i++)
	{
		ret[a][b] = i;
		
		int p = a + x[pos], q = b + y[pos];
        //判断是否越界
		if(p>n||q>n||q<1||ret[p][q]!=0) ++pos%=4;
		a += x[pos];
		b += y[pos];
	}
	
	//打印数组
	for(int i = 1; i<=n;i++) 
	{
		for(int j = 1;j<=n;j++)
		{
			printf("%3d",ret[i][j]);
		}
		cout<<endl;
	}
	return 0;
 }                                                                                            

3.[P1098 NOIP 2007 提高组] 字符串的展开 - 洛谷

image-20250303160316175

算法原理

题目描述过多,可以先写主要逻辑,中间一些内容可以用函数代替

基本逻辑:

int main()
{
	cin>>p1>>p2>>p3>>s;
	for(int i = 0;i<s.size();i++)
	{
		char ch = s[i];
        //判断逻辑
		if(ch!='-'||ch==0||ch==s.size()-1) ret+=ch;
		else
		{
			char left = s[i-1];
			char right = s[i+1];
            //判断是数字还是字母
			if((islet(left)&&islet(right)&&left<right)||
			(isdig(left)&&isdig(right)&&left<right))
			{
				add(left,right);//题目实现的主要函数
			}
			else
			{
				ret+=ch;
			}
		}
	}
	cout<<ret;
}

将中间部分判断是数字还是字母的函数写出来

bool islet(char ch)
{
	return ch>='a'&&ch<='z';
}
bool isdig(char ch)
{
	return ch>='0'&&ch<='9';
}

最后再将题目要求的写出来,其中

  1. p1使用大小写字符之间相差32的特性即可完成
  2. p2直接使用循环即可完成
  3. p3使用reverse函数,要注意包含头文件<algorithm>
void add(char left,char right)
{
	string t;
	for(char i = left+1;i<right;i++)
	{
		char ch = i;
		if(p1==2&&islet(ch)) ch-=32;
		else if(p1==3) ch='*';
	
		for(int j = 0;j<p2;j++)
		{
			t += ch;
		}
	}
	if(p3==2) reverse(t.begin(),t.end());
	ret+=t;
}

代码实现

#include <iostream>
#include <algorithm>
using namespace std;
string ret,s;
int p1,p2,p3;

bool islet(char ch)
{
	return ch>='a'&&ch<='z';
}
bool isdig(char ch)
{
	return ch>='0'&&ch<='9';
}
//程序主逻辑
void add(char left,char right)
{
	string t;
	for(char i = left+1;i<right;i++)
	{
		char ch = i;
		if(p1==2&&islet(ch)) ch-=32;
		else if(p1==3) ch='*';
	
		for(int j = 0;j<p2;j++)
		{
			t += ch;
		}
	}
	if(p3==2) reverse(t.begin(),t.end());
	ret+=t;
}

int main()
{
	cin>>p1>>p2>>p3>>s;
	for(int i = 0;i<s.size();i++)
	{
		char ch = s[i];
        //判断逻辑
		if(ch!='-'||ch==0||ch==s.size()-1) ret+=ch;
		else
		{
			char left = s[i-1];
			char right = s[i+1];
			if((islet(left)&&islet(right)&&left<right)||
			(isdig(left)&&isdig(right)&&left<right))
			{
				add(left,right);
			}
			else
			{
				ret+=ch;
			}
		}
	}
	
	cout<<ret;
}

总结这类题目要求分类详细,判断时要注意越界情况

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

关于对机器中的人工智能进行基准测试

大家读完觉得有帮助记得及时关注和点赞&#xff01;&#xff01;&#xff01; 抽象 最近的基准研究声称&#xff0c;AI 在各种认知任务上的表现已经接近甚至超过人类的“水平”。然而&#xff0c;本立场文件认为&#xff0c;当前的 AI 评估范式不足以评估类似人类的认知能力。我…

c++ 内存管理系统之智能指针

1.c内存管理 1.代码区 也称Text Segment&#xff0c;存放可执行程序的机器码。 2 数据区&#xff1a; 存放已初始化的全局和静态变量&#xff0c; 常量数据&#xff08;如字符串常量&#xff09;。 存放未初始化的全局和静态变量 无疑解释静态变量的来源&#xff1a; 局…

Unity中的Destroy和DestroyImmediate的区别是什么?

在 Unity 中&#xff0c;Destroy 和 DestroyImmediate 都是用于销毁游戏对象&#xff08;GameObject&#xff09;、组件&#xff08;Component&#xff09;或资源的方法。在大多数情况下&#xff0c;建议优先使用 Destroy 方法&#xff0c;只有在确实需要立即销毁对象时才使用 …

Microk8s Ingress实现七层负载均衡

Microk8s Ingress是什么 Ingress是k8s的一种资源对象&#xff0c;用于管理外部对集群内服务的访问, 它通过提供一个统一的入口点&#xff0c;将外部流量路由到集群内部的不同服务。 Microk8s Ingress用于解决什么问题 k8s集群中服务默认只能在集群内访问。 如果需要从外部访…

DeepSpeek服务器繁忙?这几种替代方案帮你流畅使用!(附本地部署教程)

作者&#xff1a;后端小肥肠 目录 1. 前言 2. 解决方案 2.1. 纳米AI搜索&#xff08;第三方平台&#xff09; 2.2. Github&#xff08;第三方平台&#xff09; 2.3. 硅基流动&#xff08;第三方API&#xff09; 3. 本地部署详细步骤 3.1. 运行配置需求 3.2. 部署教程 4…

【大厂AI实践】美团:美团智能客服核心技术与实践

【大厂AI实践】美团&#xff1a;美团智能客服核心技术与实践 &#x1f31f; 嗨&#xff0c;你好&#xff0c;我是 青松 &#xff01; &#x1f308; 自小刺头深草里&#xff0c;而今渐觉出蓬蒿。 NLP Github 项目推荐&#xff1a; 【AI 藏经阁】&#xff1a;https://gitee.com…

科技查新有不通过的情况吗?为什么?

1. 科技查新有不通过的情况吗&#xff1f;为什么&#xff1f; 有。科技查新“不通过”&#xff08;即查新报告显示技术缺乏新颖性或存在侵权风险&#xff09;的情况并不罕见&#xff0c;主要原因包括&#xff1a; &#xff08;1&#xff09;技术缺乏创新性 重复开发&#xff…

批量提取 Word 文档中的页面

如何将 Word 文档中的页面提取出来形成一个新的文档呢&#xff1f;比如将 Word 文档中的第一页提取出来、将 Word 文档中的最后一页提取出来、再或者将 Word 文档中的中间几页提取出来等等。人工的处理肯定非常的麻烦&#xff0c;需要新建 Word 文档&#xff0c;然后将内容复制…

Spring统一格式返回

目录 一&#xff1a;统一结果返回 1&#xff1a;统一结果返回写法 2&#xff1a;String类型报错问题 解决方法 二&#xff1a;统一异常返回 统一异常返回写法 三&#xff1a;总结 同志们&#xff0c;今天咱来讲一讲统一格式返回啊&#xff0c;也是好久没有讲过统一格式返…

(十 八)趣学设计模式 之 观察者模式!

目录 一、 啥是观察者模式&#xff1f;二、 为什么要用观察者模式&#xff1f;三、 观察者模式的实现方式四、 观察者模式的优缺点五、 观察者模式的应用场景六、 总结 &#x1f31f;我的其他文章也讲解的比较有趣&#x1f601;&#xff0c;如果喜欢博主的讲解方式&#xff0c;…

Linux虚拟机网络配置-桥接网络配置

简介 本文档旨在指导用户如何在虚拟环境中配置Linux系统的桥接网络&#xff0c;以实现虚拟机与物理主机以及外部网络的直接通信。桥接网络允许虚拟机如同一台独立的物理机一样直接连接到物理网络&#xff0c;从而可以被分配一个独立的IP地址&#xff0c;并能够与网络中的其他设…

视频教育网站开源系统的部署安装 (roncoo-education)服务器为ubuntu22.04.05

一、说明 前端技术体系&#xff1a;Vue3 Nuxt3 Vite5 Vue-Router Element-Plus Pinia Axios 后端技术体系&#xff1a;Spring Cloud Alibaba2021 MySQL8 Nacos Seata Mybatis Druid redis 后端系统&#xff1a;roncoo-education&#xff08;核心框架&#xff1a;S…

线程相关八股

1. 线程和进程的区别&#xff1f; 进程&#xff1a;进程可以简单理解为进行一个程序&#xff0c;比如说我们打开一个浏览器&#xff0c;打开一个文本&#xff0c;这就是开启了一个进程&#xff0c;一个进程想要在计算机中运行&#xff0c;需要将程序交给CPU&#xff0c;将数据…

Python 绘制迷宫游戏,自带最优解路线

1、需要安装pygame 2、上下左右移动&#xff0c;空格实现物体所在位置到终点的路线&#xff0c;会有虚线绘制。 import pygame import random import math# 迷宫单元格类 class Cell:def __init__(self, x, y):self.x xself.y yself.walls {top: True, right: True, botto…

【音视频】VLC播放器

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 一、vlc是什么&#xff1f; VLC Media Player&#xff08;简称VLC&#xff09;是一款免费、开源、跨平台的多媒体播放器&#xff0c;由非营利组织VideoLAN开发&#xff0c;最…

vue2+ele-ui实践

前言&#xff1a;真理先于实践&#xff0c;实践发现真理&#xff0c;再实践检验真理 环境&#xff1a;vue2 & element-ui 正片&#xff1a; Select 选择器 简称 下拉框 下拉框完整的使用循环 下拉框 → 点击下拉框 → 展示数据 → 选择数据 → 下拉框显示数据 核心具有…

刷题日记——部分二分算法题目分享

前言 咱们紧跟上一期结合时间复杂度浅谈二分法的好处, 并分享部分二分题目(将持续更新题目,绝对值你一个收藏)-CSDN博客 笔者接着分享一些刷过的关于二分算法的题目. 第一题 1283. 使结果不超过阈值的最小除数 - 力扣&#xff08;LeetCode&#xff09; 这道题就是典型的二…

excel 斜向拆分单元格

右键-合并单元格 右键-设置单元格格式-边框 在设置好分割线后&#xff0c;你可以开始输入文字。 需要注意的是&#xff0c;文字并不会自动分成上下两行。 为了达到你期望的效果&#xff0c;你可以通过 同过左对齐、上对齐 空格键或使用【AltEnter】组合键来调整单元格中内容的…

关于常规模式下运行VScode无法正确执行“pwsh”问题

前言&#xff1a; pwsh在系统环境中正确配置&#xff0c;且可以运行在cmd&#xff0c; powshell&#xff08;5.1&#xff09;--- 都需要在管理员权限下运行 &#xff08;打开setting&#xff09; 打开setting.json &#xff08;在vscode中添加 powershell 7 路径&…

企微审批中MySQL字段TEXT类型被截断的排查与修复实践

在MySQL中&#xff0c;TEXT类型字段常用于存储较大的文本数据&#xff0c;但在一些应用场景中&#xff0c;当文本内容较大时&#xff0c;TEXT类型字段可能无法满足需求&#xff0c;导致数据截断或插入失败。为了避免这种问题&#xff0c;了解不同文本类型&#xff08;如TEXT、M…