《算法笔记》总结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

相关文章

Python实现图片分割的多种方法总结

《Python实现图片分割的多种方法总结》图片分割是图像处理中的一个重要任务,它的目标是将图像划分为多个区域或者对象,本文为大家整理了一些常用的分割方法,大家可以根据需求自行选择... 目录1. 基于传统图像处理的分割方法(1) 使用固定阈值分割图片(2) 自适应阈值分割(3) 使用图像边缘检测分割(4)

Windows Docker端口占用错误及解决方案总结

《WindowsDocker端口占用错误及解决方案总结》在Windows环境下使用Docker容器时,端口占用错误是开发和运维中常见且棘手的问题,本文将深入剖析该问题的成因,介绍如何通过查看端口分配... 目录引言Windows docker 端口占用错误及解决方案汇总端口冲突形成原因解析诊断当前端口情况解

openCV中KNN算法的实现

《openCV中KNN算法的实现》KNN算法是一种简单且常用的分类算法,本文主要介绍了openCV中KNN算法的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录KNN算法流程使用OpenCV实现KNNOpenCV 是一个开源的跨平台计算机视觉库,它提供了各

利用Python快速搭建Markdown笔记发布系统

《利用Python快速搭建Markdown笔记发布系统》这篇文章主要为大家详细介绍了使用Python生态的成熟工具,在30分钟内搭建一个支持Markdown渲染、分类标签、全文搜索的私有化知识发布系统... 目录引言:为什么要自建知识博客一、技术选型:极简主义开发栈二、系统架构设计三、核心代码实现(分步解析

springboot+dubbo实现时间轮算法

《springboot+dubbo实现时间轮算法》时间轮是一种高效利用线程资源进行批量化调度的算法,本文主要介绍了springboot+dubbo实现时间轮算法,文中通过示例代码介绍的非常详细,对大家... 目录前言一、参数说明二、具体实现1、HashedwheelTimer2、createWheel3、n

SpringBoot实现MD5加盐算法的示例代码

《SpringBoot实现MD5加盐算法的示例代码》加盐算法是一种用于增强密码安全性的技术,本文主要介绍了SpringBoot实现MD5加盐算法的示例代码,文中通过示例代码介绍的非常详细,对大家的学习... 目录一、什么是加盐算法二、如何实现加盐算法2.1 加盐算法代码实现2.2 注册页面中进行密码加盐2.

Java时间轮调度算法的代码实现

《Java时间轮调度算法的代码实现》时间轮是一种高效的定时调度算法,主要用于管理延时任务或周期性任务,它通过一个环形数组(时间轮)和指针来实现,将大量定时任务分摊到固定的时间槽中,极大地降低了时间复杂... 目录1、简述2、时间轮的原理3. 时间轮的实现步骤3.1 定义时间槽3.2 定义时间轮3.3 使用时

java常见报错及解决方案总结

《java常见报错及解决方案总结》:本文主要介绍Java编程中常见错误类型及示例,包括语法错误、空指针异常、数组下标越界、类型转换异常、文件未找到异常、除以零异常、非法线程操作异常、方法未定义异常... 目录1. 语法错误 (Syntax Errors)示例 1:解决方案:2. 空指针异常 (NullPoi

Java反转字符串的五种方法总结

《Java反转字符串的五种方法总结》:本文主要介绍五种在Java中反转字符串的方法,包括使用StringBuilder的reverse()方法、字符数组、自定义StringBuilder方法、直接... 目录前言方法一:使用StringBuilder的reverse()方法方法二:使用字符数组方法三:使用自

如何通过Golang的container/list实现LRU缓存算法

《如何通过Golang的container/list实现LRU缓存算法》文章介绍了Go语言中container/list包实现的双向链表,并探讨了如何使用链表实现LRU缓存,LRU缓存通过维护一个双向... 目录力扣:146. LRU 缓存主要结构 List 和 Element常用方法1. 初始化链表2.