《算法笔记》总结No.2——模拟

2024-06-19 15:20
文章标签 算法 总结 笔记 模拟 no.2

本文主要是介绍《算法笔记》总结No.2——模拟,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一.简单模拟

考察代码能力,不涉及算法:一类题目怎么说你就怎么做的类型~

巴音布鲁克比赛,以车队为基准评选冠军。业务要求是:第一行输入正整数N,代表车手的总个数;接下来的N行每行键入两个数字:分别是车队编号和该车手得分。最终要求输出冠军车队及其得分~


没什么可说的,直接根据数组下标来储存各个队的积分,再升序排列,将最后一位输出即可,如下:

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;int main(int argc, char** argv) 
{int N=0;cin>>N;vector<int> V;for(int i=1;i<=N;i++)V.push_back(0);for(int i=0;i<=N-1;i++){int num=0,count=0;cin>>num>>count;V[num-1]+=count;}sort(V.begin(),V.end());cout<<"全部分数如下:"<<endl; for(int i=0;i<=N-1;i++)if(V[i]!=0)cout<<V[i]<<" ";cout<<"最大值是:"<<V[N-1]<<endl;
}

博主本人习惯用STL库了,其实用普通的数组和简单的最大值搜索亦可实现~

总的来说,这类纯模拟显示的题目,只需要保证:

  • 数组下标不越界——或者说时间空间不超额
  • STL掌握熟练
  • 结构体使用灵活

一般情况下没有能卡壳的题目~

二.查找元素

小范围的查找直接遍历,范围大时可以使用二分查找(本帖暂不展开~)

键入10个学生信息,将制定班号的学生姓名全部输出:

#include <iostream>
#include <vector>
#include <string> 
using namespace std;struct student{int num; string name;
}; 
int main(int argc, char** argv) 
{vector<student> V;for(int i=0;i<10;i++){int num=0;string name;student temp;cin>>num>>name;temp.name=name;temp.num=num;V.push_back(temp);}int num=0;cin>>num;for(int i=0;i<=V.size()-1;i++)if(V[i].num==num)cout<<V[i].name<<" ";
}

同样没什么难度~
 

三.图形输出

大一C语言常见的阴阳类题目,需要掌握格式化输出的细节~

输入一个数字和某种字符,然后输出一个由该字符组成的、腰长为num的等腰直角三角型:

#include <iostream>
using namespace std;int main(int argc, char** argv) 
{int num=0;char goal;cin>>num>>goal;for(int i=1;i<=num;i++) //外层控制行数{for(int j=1;j<=i;j++)cout<<goal;cout<<endl; }	
}

同样很简单,没什么可说的:

四.进制转换

        进制转换也是非常常用的基本功,这里博主只给出10进制分别转换为2/8/16进制的代码,至于这3种转换为10进制的函数,要考虑很多情况——比如二进制的输入方式,是int、还是vector<int>、string型,这要根据不同输入方式分类讨论~

十进制转二进制:

void TenTo2(int x)
{cout<<x<<"的2进制为:";vector<int> V;while(x!=0){int temp=x%2;V.push_back(temp);x/=2;}for(int i=V.size()-1;i>=0;i--)cout<<V[i];cout<<endl;
}

 十进制转八进制:

void TenTo8(int x)
{cout<<x<<"的8进制为:";vector<int> V;while(x!=0){int temp=x%8;V.push_back(temp);x/=8;}for(int i=V.size()-1;i>=0;i--)cout<<V[i];cout<<endl;
}

十进制转十六进制:

void TenTo16(int x)
{cout<<x<<"的16进制为:";vector<int> V;while(x!=0){int temp=x%16;V.push_back(temp);x/=16;}for(int i=V.size()-1;i>=0;i--){if(V[i]<=9)cout<<V[i];else if(V[i]==10)cout<<"A";else if(V[i]==11)cout<<"B";else if(V[i]==12)cout<<"C";else if(V[i]==13)cout<<"D";else if(V[i]==14)cout<<"E";else if(V[i]==15)cout<<"F";}cout<<endl;
} 

简单测试一下:

int main(int argc, char** argv) 
{int n=38;TenTo2(38);int m=100;TenTo8(m);int a=200;TenTo16(a);
}

 没什么问题:

首先要会STL和手写进制转换,写出来函数很容易的~) 

五.字符串处理 

  • 同样是非常吃代码基本功的题目类型
  • 建议STLcstringalgorithm头文件等自带的函数一定要学会

举例一道非常经典的基础题——说反话:即将输入的字符串倒序输出:

输入:My name is JSL

输出:Jsl is name My

对于新手的难点大致如下:

  1. 如何键入目标字符串?
  2. 如何逆转顺序

这里博主将输入的string断开直接保存在string型的vector中,然后图省事直接调用STL的reverse逆转一下即可~

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
int main(){vector<string> V;string s;char c;while ((cin >> s).get(c)){V.push_back(s);if (c =='\n')break;}cout << "输入结束~" << endl;reverse(V.begin(),V.end());for(int i=0;i<=V.size()-1;i++)cout<<V[i]<<" "; return 0;
}


        总的来说,说什么就做什么的模拟题大致上没什么难度,只要熟练使用STL几乎不会有卡壳的地方:STL中最重要的就是vector和string容器,以及algorithm中的sort、reverse、reserve,上述几者配合结构体能达到非常出类拔萃的效果~ 

这篇关于《算法笔记》总结No.2——模拟的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1075404

相关文章

SQL中JOIN操作的条件使用总结与实践

《SQL中JOIN操作的条件使用总结与实践》在SQL查询中,JOIN操作是多表关联的核心工具,本文将从原理,场景和最佳实践三个方面总结JOIN条件的使用规则,希望可以帮助开发者精准控制查询逻辑... 目录一、ON与WHERE的本质区别二、场景化条件使用规则三、最佳实践建议1.优先使用ON条件2.WHERE用

Nginx Location映射规则总结归纳与最佳实践

《NginxLocation映射规则总结归纳与最佳实践》Nginx的location指令是配置请求路由的核心机制,其匹配规则直接影响请求的处理流程,下面给大家介绍NginxLocation映射规则... 目录一、Location匹配规则与优先级1. 匹配模式2. 优先级顺序3. 匹配示例二、Proxy_pa

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

Python使用pynput模拟实现键盘自动输入工具

《Python使用pynput模拟实现键盘自动输入工具》在日常办公和软件开发中,我们经常需要处理大量重复的文本输入工作,所以本文就来和大家介绍一款使用Python的PyQt5库结合pynput键盘控制... 目录概述:当自动化遇上可视化功能全景图核心功能矩阵技术栈深度效果展示使用教程四步操作指南核心代码解析

MySQL基本查询示例总结

《MySQL基本查询示例总结》:本文主要介绍MySQL基本查询示例总结,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录Create插入替换Retrieve(读取)select(确定列)where条件(确定行)null查询order by语句li

Python模拟串口通信的示例详解

《Python模拟串口通信的示例详解》pySerial是Python中用于操作串口的第三方模块,它支持Windows、Linux、OSX、BSD等多个平台,下面我们就来看看Python如何使用pySe... 目录1.win 下载虚www.chinasem.cn拟串口2、确定串口号3、配置串口4、串口通信示例5

使用雪花算法产生id导致前端精度缺失问题解决方案

《使用雪花算法产生id导致前端精度缺失问题解决方案》雪花算法由Twitter提出,设计目的是生成唯一的、递增的ID,下面:本文主要介绍使用雪花算法产生id导致前端精度缺失问题的解决方案,文中通过代... 目录一、问题根源二、解决方案1. 全局配置Jackson序列化规则2. 实体类必须使用Long封装类3.

Springboot实现推荐系统的协同过滤算法

《Springboot实现推荐系统的协同过滤算法》协同过滤算法是一种在推荐系统中广泛使用的算法,用于预测用户对物品(如商品、电影、音乐等)的偏好,从而实现个性化推荐,下面给大家介绍Springboot... 目录前言基本原理 算法分类 计算方法应用场景 代码实现 前言协同过滤算法(Collaborativ

Linux区分SSD和机械硬盘的方法总结

《Linux区分SSD和机械硬盘的方法总结》在Linux系统管理中,了解存储设备的类型和特性是至关重要的,不同的存储介质(如固态硬盘SSD和机械硬盘HDD)在性能、可靠性和适用场景上有着显著差异,本文... 目录一、lsblk 命令简介基本用法二、识别磁盘类型的关键参数:ROTA查询 ROTA 参数ROTA

Qt实现网络数据解析的方法总结

《Qt实现网络数据解析的方法总结》在Qt中解析网络数据通常涉及接收原始字节流,并将其转换为有意义的应用层数据,这篇文章为大家介绍了详细步骤和示例,感兴趣的小伙伴可以了解下... 目录1. 网络数据接收2. 缓冲区管理(处理粘包/拆包)3. 常见数据格式解析3.1 jsON解析3.2 XML解析3.3 自定义