寒假训练营 第3节 第2节内容复习及团队作业整理

在第2节和本节中我们大致学习了数据结构中的线性表,栈,队列,以及二叉树。其中,我们学习了一种在c++中极其方便的使用这些数据结构的方式:利用STL容器,可以使用诸如stack、queue、vector等可以直接使用的数据结构类型,这对于我们学习算法以及编程知识都有很大好处。
以下是我对团队作业部分内容的题解。

1.洛谷p3156—询问学号
集训队团队作业——线性表 
//询问学号
#include<iostream>

using namespace std;
int a[2000010]={0};
int main()
{
	int n,m;
	cin >> n >> m;
	for(int i = 1 ; i <= n ; i++)
		cin >> a[i];
	int temp;
	for(int i = 1 ; i <= m ; i ++)
	{
		cin >> temp;
		cout << a[temp] << endl;
	}
	
	return 0;
 } 

询问学号
///*(STL容器):用STL容器里的vector(可变数组(向量))实现*/
//#include<iostream>
//#include<vector> 
//
//using namespace std;
//
//int main()
//{
//	vector<int>a;
//	int n , m;
//	cin >> n >> m; 
//	int temp;
//	for(int i = 0 ; i < n ; i++)
//	{
//		cin >> temp;
//		a.push_back(temp); 
//	}
//	for(int i = 0 ; i < m ; i++)
//	{
//		cin >> temp;
//		cout << a[temp - 1] << endl;
//	}
//	
//	return 0;
//}
2.洛谷p1449—后缀表达式
//后缀表达式
#include<iostream>
#include<stack>
#include<string>
using namespace std;

stack<long long>st;
string s;

int main()
{
	cin >> s;
	int num = 0;
	int x = 0 , y = 0;
	for(int i = 0 ; i < s.size()-1 ; i++)
	/*i < s.size()-1 ,最后一位是@,用
	i < s.size()-1 可以屏蔽@*/
	{
		
		if(s[i] >= '0' && s[i] <= '9')
			num = num*10 + s[i] - '0'; 
			/*将字符型数字转化为整形
			如字符串13,转换为整形13*/
		else if(s[i] == '.')
		{
			st.push(num);
			num = 0; 
		}
		else
		{
			switch(s[i])
			{
				case '+' :{
					x = st.top() ; st.pop() ; y = st.top() ; st.pop() ;
					st.push(y + x); 
					break;
				}
				case '*' :{
					x = st.top() ; st.pop() ; y = st.top() ; st.pop() ;
					st.push(y * x); 
					break;
				}
				case '-' :{
					x = st.top() ; st.pop() ; y = st.top() ; st.pop() ;
					st.push(y - x); 
					break;
				}
				case '/' :{
					x = st.top() ; st.pop() ; y = st.top() ; st.pop() ;
					st.push(y / x); 
					break;
				}

			}
		}
	}
	cout << st.top();
	
	return 0;
 } 
3.洛谷p1540—机器翻译
//机器翻译
#include<iostream>

using namespace std;

int a[1010] = {0}; 
int b[1010] = {-1};
int main()
{
	int m , n;
	cin >> m >> n;
	int i,j,k;
	int temp;
	int begin = 0 , num = 0;
	int ans = 0;
	for(i = 0 ; i < n ; i++)
	{
		cin >> temp;
		for(j = begin ; j <= num ; j++)
		{
			if(b[j] == temp) break;
		}
		if(j >= num)
		{
			ans++;
			b[num] = temp;
			num++;
			if(num > m) begin++;
		}
		
	}
	
	cout << ans;
	
	return 0;
 } 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值