洛谷C++简单题小练习day22—小鱼记忆小程序!一题五解,高效学习

news/2024/7/20 3:01:59 标签: c++, 小程序, 算法, 开发语言, 数据结构, 学习

day22--小鱼记忆--2.26

习题概述

题目描述

小鱼最近被要求参加一个数字游戏,要求它把看到的一串数字 ai​(长度不一定,以 0 结束),记住了然后反着念出来(表示结束的数字 0 就不要念出来了)。这对小鱼的那点记忆力来说实在是太难了,你也不想想小鱼的整个脑袋才多大,其中一部分还是好吃的肉!所以请你帮小鱼编程解决这个问题。

输入格式

一行内输入一串整数,以 0 结束,以空格间隔。

输出格式

一行内倒着输出这一串整数,以空格间隔。

代码展示 

法一:常规做法,利用for循环来改变条件使得其逆序输出

#include<bits/stdc++.h>
using namespace std;

int x[100],c=0;
int main()
{
    for(int i=0;i>=0;i++){
        cin>>x[i];
        if(x[i]==0) break; 
        c=i;
    }
    for(int j=c;j>=0;j--)
    cout<<x[j]<<" ";
    return 0;
}

法二: STL栈

1. STL中最基本的一种数据结构就是vector

#include<bits/stdc++.h>
using namespace std;

vector<int> a;
int c;//STL可以完全不用担心数组大小的问题,这个和string类似 
int main(){
	while(1){//有时候也可以巧用死循环 
		cin>>c;
		if(c==0) break;//终止条件 
		a.push_back(c);//将括号里的元素压入vector尾部 
	}
	while(!a.empty()){
		cout<<a.back()<<" ";//.back()是一个返回vector尾部元素的函数 
		a.pop_back();//删除vector尾部的元素
	}
    /*
    这一部分输出程序也可以写成:
    for(int i=a.size()-1;i>=0;i--){//a.size()返回a中元素的个数
        cout<<a[i]<<" ";
    }
    要注意vector是从a[0]开始存储a.size()个元素,要当心越界访问
    */
	return 0;
} 

2. STL中还有一个专门为栈设计的数据结构—stack(后进先出)

#include<bits/stdc++.h>
using namespace std;

stack<int> a;//定义一个int型的stack 
int c;
int main(){
	while(1){
		cin>>c;
		if(c==0) break;
		a.push(c);//将括号里的元素压入stack顶部 
	}
	while(!a.empty()){
		cout<<a.top()<<" ";//.top()是一个返回stack顶部元素的函数 
		a.pop();//删除stack顶部的元素 
	}
	return 0;
} 

法三:指针法

1. 数组指针

#include<bits/stdc++.h>
using namespace std;

int a[101],c;
int *p=a;//定义一个int类型的指针,指向数组不用取地址符 
int main(){
	while(1){
		cin>>c;
		if(c==0) break;
		p++;//指针指向当前所指元素在数组中的下一个元素 
		*p=c;//星号表示这个指针现在不是代表地址而是代表该地址的元素 
	}
	while(p!=a){//当指针不是指向数组的第一个元素地址 
		cout<<*p<<" ";
		p--;
	}
	return 0;
} 

 2. STL指针—迭代器

#include<bits/stdc++.h>
using namespace std;

vector<int> a;
int c;
int main(){
	while(1){
		cin>>c;
		if(c==0) break;
		a.push_back(c);
	}
	for(vector<int>::iterator it=a.end()-1;it>=a.begin();it--)
	{
		/*a.end()返回的是a中最后一个元素后面的地址,因此一定要记得-1
		a.begin()返回a的第一个元素的地址 
		*/ 
		cout<<*it<<" "; //*it表示it所指的元素 
	}
	return 0;
}

法四:sort函数排序法

#include<bits/stdc++.h>
using namespace std;

struct node
{
	int time;//存储该数据被输入的时间先后
	int value;//存储该数据的赋值 
}a[101];
int c,n;
int cmp(node x,node y){//自定义比较函数 
	return x.time>y.time;
}
int main(){
	while(1){
		cin>>c;
		if(c==0) break;
		a[n].value=c;
		a[n].time=n;
		n++;
	}
	sort(a,a+n,cmp);//前两个变量分别表示开始排序的元素的地址和结束排序的元素的地址 
	for(int i=0;i<n;i++){
		cout<<a[i].value<<" ";
	}
	return 0;
} 

法五:优先队列法

#include<bits/stdc++.h>
using namespace std;

struct node{
	int time;
	int value; 
}t;
priority_queue<node> a;
bool operator<(const node &x,const node &y){//这里比较函数的名字不能改,两个const和两个&也不能去掉
	return x.time<y.time;
}//定义优先队列的比较函数,这个和sort相反,是使得排序后前后代入可以return false,具体细节请自行了解吧
int c,n;
int main(){
	while(1){
		cin>>c;
		if(c==0) break;
		n++;
		t.value=c;
		t.time=n;
		a.push(t);//将元素输入优先队列 
	}
	while(!a.empty()){
		cout<<a.top().value<<" ";//.top()返回优先队列的第一个元素
		a.pop();//删除优先队列的第一个元素 
	}
	return 0;
} 

未完待续...等我复习完数据结构一轮之后再来 深度优先搜索(DFS),广度优先搜索(BFS),二叉树后序(中序)遍历,dijkstra算法

心得体会

1.  栈(Stack)是一种常见的数据结构,它遵循后进先出的原则。栈通常用于存储和管理数据,在栈中,最后插入的元素会被最先删除。

栈有两种基本操作:

1.压栈(Push):向栈顶添加一个元素。

2.出栈(Pop):从栈顶移除一个元素。

除了上述基本操作外,栈还可以支持以下操作:

·栈顶(Top):获取栈顶元素但不删除。

·判空(Empty):判断栈是否为空。

·大小(Size):获取栈中元素的数量。

2. sort函数介绍

vector<int> vec = {3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5};

sort(vec.begin(), vec.end()); // 对向量进行排序默认升序

sort(vec.begin(), vec.end(), greater<int>()); //使用自定义排序规则进行降序排序

3. 优先队列法

优先队列(Priority Queue)是一种特殊的队列,它的元素按照一定的顺序进行排列;

支持自定义比较函数,以便于适应不同的排序需求。例如,如果我们想要按照降序排列,可以这样创建优先队列:

priority_queue<int, vector<int>, less<int>> pq;

常见应用场景: 优先队列常用于实现一些贪心算法、最短路径算法(如 Dijkstra 算法)、最小生成树算法(如 Prim 和 Kruskal 算法)等需要根据优先级进行处理的算法


http://www.niftyadmin.cn/n/5394895.html

相关文章

【神经网络】基础知识与CNN网络基本框架

神经网络基础架构 基础动图网站&#xff1a;点击这里 整体框架为输入层&#xff0c;中间隐藏层&#xff0c;最后输出结果。 输入层&#xff0c;在这里图中主要是确定输入什么样的参数。比如说这个例子做分类&#xff0c;每一个点具有一个二维坐标系&#xff0c;那么可以选择的…

Unity3D 使用 Lerp 进行连续运动

有很多关于在 Unity 中使用 lerp 方法移动对象的帖子和视频,但很少有人指出主要问题。 在开始之前,请阅读这篇文章以了解 Lerp 方法:How to Lerp like a pro | Chico Unity3D 正如您在上面的文章中读到的,lerp 方法遵循一个简单的概念。设置开始和结束位置以及进度百分比。…

【Flink】Flink 中的时间和窗口之窗口(Window)

1. 窗口的概念 Flink是一种流式计算引擎&#xff0c;主要是来处理无界数据流&#xff0c;数据流的数据是一直都有的&#xff0c;等待流结束输入数据获取所有的流数据在做聚合计算是不可能的。为了更方便高效的处理无界流&#xff0c;一种方式就是把无限的流数据切割成有限的数…

斯坦福大学为机器人操作模仿学习设计了示教新范式

近期斯坦福大学提出了通用操纵界面&#xff08;UMI&#xff09;–一种数据收集和策略学习框架&#xff0c;可将人类演示的技能直接转移到可部署的机器人策略中。 https://umi-gripper.github.io/ UMI 采用手持式抓手和精心的界面设计&#xff0c;可为具有挑战性的双臂和动态操…

Chrome 浏览器代理插件 SwitchyOmega 安装与使用

前言 SwitchyOmega 是什么? Proxy SwitchyOmega 是 Chrome 和 Firefox 浏览器上的代理扩展程序,可以轻松快捷的管理和切换多个代理设置,支持HTTP、HTTPS、SOCKS4、SOCKS5等多种代理协议。 SwitchyOmega只是管理代理的,本身并不提供代理服务,需要配合节点使用。 下载 Swi…

Mysql 高可用解决方案

1.环境说明 操作系统&#xff1a;centos7.7 主服务器&#xff1a;node2(192.168.1.102) 从服务器&#xff1a;node3(192.168.1.103) keepalived中虚拟ip(VIP):192.168.1.100 2.准备事项 主库和从库数据库的版本一致把主库的数据同步给从库一份 3.主库配置 3.1 编辑MySQL配…

如何搭建零售行业经营分析体系?

​怎么搭建零售行业的经营分析体系&#xff1f; 整体思路就是&#xff1a;利用数据中台基于业务全价值链的数据沉淀&#xff0c;借助大数据技术进行采集、计算、存储和加工&#xff0c;同时统一数据建模与治理&#xff0c;构建数据资产&#xff0c;充分挖掘数据&#xff0c;实…

MATLAB环境下基于超高斯全自动组织学图像的盲彩色反卷积方法

图像盲反卷积问题仅根据模糊图像估计清晰图像和模糊核&#xff0c;也是一个欠定问题且求解更加困难。但图像盲反卷积算法更实际&#xff0c;因为许多情况下&#xff0c;模糊核都是未知或部分已知的。求解盲反卷积问题需要为未知量选择适当的先验模型&#xff0c;以得到清晰图像…