蓝桥杯——11

学习视频:10-常用 STL练习(C++ 版)_哔哩哔哩_bilibili

Q:推积木

学!!!

			vec[b].clear(); //不清空间
			vector<int>().swap(vec[b]);   //清一下b以及它的空间
vector<int> vec[10005];
int main()
{
	int n, m;
	cin >> n >> m;
	for (int i = 1; i <= n; i++) {  	//初始化
		vec[i].push_back(i);
	}
	int a, b;
	int temp;
	for (int i = 0; i < m; i++) {
		cin >> a >> b;
		if (a == b) continue;
		else {
			if (!vec[b].empty()) {
				for (int j = 0; j < vec[b].size(); j++) {
					vec[a].push_back(vec[b][j]);
				}
			}
			vec[b].clear(); //不清空间
			vector<int>().swap(vec[b]);   //清一下b以及它的空间
		}
	}
	int len;
	for (int i = 1; i <= n; i++) {
		len = vec[i].size();
		for (int j = 0; j < len; j++) {
			cout << vec[i][j] << " ";
		}
		cout << endl;
	}
	return 0;
}

Q;计算集合的并

学!!!

for (set<int>::iterator it = a.begin(); it != a.end();it++) {
		cout << *it <<" ";  //!!!1
	}
set<int> a;
int main()
{
	int n, m;
	cin >> n >> m;
	int aa;
	for (int i = 0; i < n + m; i++) {
		cin >> aa;
		a.insert(aa);
	}
	int len = a.size();
	for (set<int>::iterator it = a.begin(); it != a.end();it++) {
		cout << *it <<" ";  //!!!1
	}

	return 0;
}

Q:学英语

学!!!

sum = word.size();
sum = word.length();
//都可以!!!
set<string> s0;
set<string> s1;
int main()
{
	int n;
	cin >> n;
	int flag, sum = 0;
	string word;
	for (int i = 0; i < n; i++) {
		cin >> flag >> word;
		sum = word.size();
		for (int i = 0; i < sum; i++) {
			if (word[i] <= 'z' && word[i] >= 'a')
				continue;
			else
				word[i] += 'a' - 'A';
		}
		if (flag == 0)
			s0.insert(word);
		else {
			if (s0.count(word))
				cout << "Yes" << endl;
			else
				cout << "No" << endl;
		}
	}
	return 0;
}

Q:面试

map<int, int> shu;
int main()
{
	int n;
	cin >> n;
	int num;
	for (int i = 0; i < n; i++) {
		cin >> num;
		shu[num]++;  //!!!之前没有出现,会自动初始化为0
	}
	int ans = 0;
	for (map<int, int>::iterator it = shu.begin(); it != shu.end(); it++) {
		if (it->second >= ans) {
			ans = it->second;
			num = it->first;
		}
	}
	cout << num << " " << ans << endl;
	return 0;
}

Q:水果店

#include<iostream>
#include<map>
#include<string>
#include<utility>  //!!!
using namespace std;
map<string, map<string, int>> m;
int main()
{
	int num;
	string di, guo;
	int n;
	cin >> n;
	//map<string, int> mm;
	for (int i = 0; i < n; i++) {
		cin >> guo >> di >> num;
		m[di][guo] += num;   //!!!
		//mm[guo] += num;
		//m[di] = mm;
	}

	for (map<string, map<string, int>>::iterator it = m.begin(); it != m.end(); it++) {
		cout << it->first << '\n';
		for (map<string, int>::iterator it1 = it->second.begin(); it1 != it->second.end(); it1++) {
			cout << "    |----" << it1->first << "(" << it1->second << ")" << '\n';
		}
	}

	return 0;
}

——————————————————————————————

学习视频:11-栈和递归视频讲解_哔哩哔哩_bilibili

S:手动实现一个栈

#include<iostream>
using namespace std;
struct Stack {
	int data[10000];
	int top = -1;
	void push(int x) {
		top++;
		if(top<10000)
			data[top] = x;
		else {
			top--;
			cout << "stack overflow";
		}
	}
	void pop() {
		if (top >= 0)
			top--;
	}
	int topval() {
		if (top >= 0)
			return data[top];
	}
};
int main()
{
	Stack s;
	for (int i = 1; i <= 10; i++) {
		s.push(i);
	}
	for (int i = 1; i <= 10; i++) {
		cout << s.topval() << " ";
		s.pop();
	}
	return 0;
}

学!!!!

push()  入栈

pop()  弹出栈顶元素(void)

top()  返回栈顶元素

empty()  是否为空

size()  栈的元素个数Q:火车出入站

Q:

using namespace std;
int main() {
	int n;
	cin >> n;
	vector<int> a(n);   //!!!初始化n个空间
	for (int i = 0; i < n; i++) {
		cin >> a[i];
	}
	stack<int> s;
	int cur = 1;   //未压入栈的起始位置
	bool f = 1;
	for (int i = 0; i < n; i++) {
		while ((s.empty() || s.top() != a[i]) && (cur<=n)) {
			s.push(cur);
			cur++;
		}
		if (s.empty() || s.top() != a[i]) {
			f = 0; break;
		}
		else {
			s.pop();
		}
	}
	if (f) {
		cout << "legel" << endl;
	}
	else
		cout << "illegal" << endl;
	return 0;
}

S:递归

Q:阶乘:

long long factorial(int n) {
	if (n == 1 || n == 0) return 1;
	else
		return factorial(n - 1) * n;
}
int main() {
	int n;
	cin >> n;
	cout << factorial(n);
	return 0;
}

Q:汉诺塔问题

#include<iostream>
#include<stack>
using namespace std;
stack<int> S[3];
void move(int x,int y) {
	int temp = S[x].top();
	S[x].pop();
	S[y].push(temp);
	cout << x << "-->" << y << '\n';
}
void hanoi(int A, int B, int C, int n) {  //A经过B到C,移动n个盘子
	if (n == 1) {   //直接移动
		move(A, C);
		return;
	}
	hanoi(A, C, B, n - 1);
	move(A, C);
	hanoi(B, A, C, n - 1);
}
int main() {
	int n;
	cin >> n;
	for (int i = n; i >= 1; i--) {
		S[0].push(i);
	}
	hanoi(0, 1, 2, n);
	while (!S[2].empty()) {
		cout << S[2].top() << " ";
		S[2].pop();
	}
	return 0;
}

Q:汉诺塔2

  

#include<iostream>
#include<stack>
using namespace std;
long long f[65], g[65];
int main() {
	int n;
	cin >> n;
	f[1] = 1;
	//!!!递归实质上就是我们的一个循环,每一个结果保存在数组里对应的层数上
	for (int i = 2; i <= n; i++) {
		f[i] = 2 * f[i - 1] + 1;
	}
	g[1] = 1;
	for (int i = 2; i <= n; i++) {
		g[i] = 2 * g[i-1] + i;
	}
	cout << f[n] << " " << g[n] << endl;
	return 0;
}

————————————————————————————————————

学习视频12-栈和递归练习_哔哩哔哩_bilibili

学不了了,明天再学吧

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晓晓hh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值