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

一.简单模拟

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

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


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

cpp 复制代码
#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个学生信息,将制定班号的学生姓名全部输出:

cpp 复制代码
#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的等腰直角三角型:

cpp 复制代码
#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型,这要根据不同输入方式分类讨论~

十进制转二进制:

cpp 复制代码
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;
}

十进制转八进制:

cpp 复制代码
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;
}

十进制转十六进制:

cpp 复制代码
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;
} 

简单测试一下:

cpp 复制代码
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逆转一下即可~

cpp 复制代码
#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,上述几者配合结构体能达到非常出类拔萃的效果~

相关推荐
颜酱1 小时前
图的数据结构:从「多叉树」到存储与遍历
javascript·后端·算法
saltymilk6 小时前
使用 C++ 模拟 ShaderLanguage 的 swizzle
c++·模板元编程
zone77396 小时前
006:RAG 入门-面试官问你,RAG 为什么要切块?
后端·算法·面试
CoovallyAIHub9 小时前
OpenClaw 近 2000 个 Skills,为什么没有一个好用的视觉检测工具?
深度学习·算法·计算机视觉
CoovallyAIHub9 小时前
CVPR 2026 | 用一句话告诉 AI 分割什么——MedCLIPSeg 让医学图像分割不再需要海量标注
深度学习·算法·计算机视觉
CoovallyAIHub9 小时前
Claude Code 突然变成了 66 个专家?这个 5.8k Star 的开源项目,让我重新理解了什么叫"会用 AI"
深度学习·算法·计算机视觉
兆子龙10 小时前
前端哨兵模式(Sentinel Pattern):优雅实现无限滚动加载
前端·javascript·算法
xlp666hub12 小时前
Leetcode第五题:用C++解决盛最多水的容器问题
linux·c++·leetcode
CoovallyAIHub13 小时前
9个视觉语言模型工厂实测:Qwen 87.9%碾压全场,你的显卡能跑哪个?
算法
SparkX开源AI知识库14 小时前
手摸手带你安装OpenClaw并对接飞书
算法·架构