强化训练:day5(游游的you、腐烂的苹果、孩子们的游戏(圆圈中最后剩下的数)

embedded/2024/10/20 10:24:25/

文章目录

  • 前言
  • 1. 游游的you
    • 1.1 题目描述
    • 1.2 解题思路
    • 1.3 代码实现
  • 2. 腐烂的苹果
    • 2.1 题目描述
    • 2.2 解题思路
    • 2.3 代码实现
  • 3. 孩子们的游戏(圆圈中最后剩下的数)
    • 3.1 题目描述
    • 3.2 解题思路
    • 3.3 代码实现
  • 总结

前言

  本章内容:游游的you、腐烂的苹果、孩子们的游戏(圆圈中最后剩下的数)。

1. 游游的you

1.1 题目描述

在这里插入图片描述

1.2 解题思路

  这是一道简单的模拟题,我们只需要找打三个字符中最小的个数n,也就是意味最最多能组成n个you,再用o字符的总数减去这个n,就是剩余的o的个数,如果o的个数小于2,那么就没有意义,如果大于2,比如是2的话,结果就加1,如果是3的话,结果就加2,一次类推,只需要加上剩余o的个数再减一,就是最后的结果。

1.3 代码实现

#include <iostream>
using namespace std;
int main() {int q = 0;cin >> q;while (q--) {int a, b, c;cin >> a >> b >> c;int ret = min(a, min(b, c)) * 2;int t = b - ret / 2;if (t < 2) cout << ret << endl;else cout << ret + t - 1 << endl;}return 0;
}

2. 腐烂的苹果

2.1 题目描述

在这里插入图片描述

2.2 解题思路

  一道基础的BFS的题目,借助队列将全部符合条件的值进行一次扩展,一直到队列为空结束。
  比如先循环一次,将所有符合条件的值入队列,然后从队列中一个一个取数据,进行扩展,将符合条件的结果再入队列,一直到队列为空为止。

2.3 代码实现

class Solution {public:int m, n;int dx[4] = {0, 0, 1, -1};int dy[4] = {1, -1, 0, 0};queue<pair<int, int>> q;bool vis[1001][1001];int ret;void bfs(vector<vector<int> >& grid) {while (!q.empty()) {int sz = q.size();while (sz--) {auto [a, b] = q.front();q.pop();for (int k = 0; k < 4; k++) {int x = a + dx[k], y = b + dy[k];if (x >= 0 && x < m && y >= 0 && y < n && grid[x][y] == 1) {grid[x][y] = 2;q.push({x, y});}}}ret++;}}int rotApple(vector<vector<int> >& grid) {
// 第一次进去不算ret = -1;m = grid.size(), n = grid[0].size();for (int i = 0; i < m; i++)for (int j = 0; j < n; j++) {if (grid[i][j] == 2) {q.push({i, j});}}bfs(grid);for (int i = 0; i < m; i++)for (int j = 0; j < n; j++) {if (grid[i][j] == 1) {return -1;}}return ret;}
};};

3. 孩子们的游戏(圆圈中最后剩下的数)

3.1 题目描述

在这里插入图片描述

3.2 解题思路

  这道题如果不考虑时空复杂度的限制,还是比较好写的,可以使用环形链表或者数组的方式进行解决,但是这个题要求了空间复杂度为O(1),那么这个方法就不行了。我们来通过画图来看一下这个过程:
在这里插入图片描述
  因此我们不难看出,求有n个人,最后获胜的是谁,实际上就是求有n-1个人最后获胜的是谁,……一直到n为1结束。而其中变化的仅仅只是下标,我们只需要找到删除元素与之前下标的映射关系即可。
在这里插入图片描述
  这实际上就变成了解决下标映射关系的问题。对于不太理解的小伙伴,可以画图来体会一下其中的过程,这个题我一开始也是没有写出来,还是看了题解并且画图了才勉强理解一些。
  对于这个过程不理解的,我强烈建议画图!!!画图!!!画图!!!重要的事情说三遍,而且在草稿本上画图比在电脑上画图方便多了,因此我是十分推荐通过画图来理解这个问题的。

3.3 代码实现

class Solution {public:int LastRemaining_Solution(int n, int m) {int f = 0;for (int i = 2; i <= n; i++) f = (f + m) % i;return f;}
};

总结

  又是体会到画图的便捷性的一天……,画图是我们解决困难问题的一个非常强大的帮手,它能帮助我们仔细的观察到问题变化过程中的很多细节,比起我们只用大脑空想强的多。
  那么第五天的内容就到此结束了,如果大家发现有什么错误的地方,可以私信或者评论区指出喔。我会继续坚持训练的,希望能与大家共同进步!!!那么本期就到此结束,让我们下期再见!!觉得不错可以点个赞以示鼓励!


http://www.ppmy.cn/embedded/19719.html

相关文章

富格林:可信操作提升做单盈利

富格林指出&#xff0c;黄金市场有涨有跌&#xff0c;有赚有赔&#xff0c;投资黄金并非有机会天天盈利&#xff0c;能够盈利出金最重要的原因还是投资者有正规精妙的技术。在黄金交易中&#xff0c;投资者一定要掌握可信的交易方法&#xff0c;提前布局好策略&#xff0c;这样…

ReactJS中使用TypeScript

TypeScript TypeScript 实际上就是具有强类型的 JavaScript&#xff0c;可以对类型进行强校验&#xff0c;好处是代码阅读起来比较清晰&#xff0c;代码类型出现问题时&#xff0c;在编译时就可以发现&#xff0c;而不会在运行时由于类型的错误而导致报错。但是&#xff0c;从…

从零开始:UniApp 项目搭建指南

正文&#xff1a; 在移动应用开发领域&#xff0c;UniApp 作为一款基于 Vue.js 的跨平台框架&#xff0c;为开发者提供了更加便捷的方式来构建同时支持多个平台的应用程序。本文将带领你从零开始&#xff0c;一步步地搭建一个 UniApp 项目&#xff0c;并介绍其中的关键步骤和注…

代码随想录(番外)图论2

代码随想录&#xff08;番外&#xff09;图论2 4. 岛屿数量.深搜版 5. 岛屿数量.广搜版 6. 岛屿的最大面积 https://programmercarl.com/0200.%E5%B2%9B%E5%B1%BF%E6%95%B0%E9%87%8F.%E6%B7%B1%E6%90%9C%E7%89%88.html 4. 岛屿数量.深搜版 class Solution { public:int dir[4…

ZYNQ--PL读写PS端DDR数据

PL 和PS的高效交互是zynq 7000 soc开发的重中之重,我们常常需要将PL端的大量数 据实时送到PS端处理,或者将PS端处理结果实时送到PL端处理,常规我们会想到使用DMA 的方式来进行,但是各种协议非常麻烦,灵活性也比较差,本节课程讲解如何直接通过AXI总 线来读写PS端ddr的数据…

再谈C语言——理解指针(二)

指针变量类型的意义 指针变量的⼤⼩和类型⽆关&#xff0c;只要是指针变量&#xff0c;在同⼀个平台下&#xff0c;⼤⼩都是⼀样的&#xff0c;为什么还要有各种各样的指针类型呢&#xff1f; 其实指针类型是有特殊意义的&#xff0c;我们接下来继续学习。 指针的解引⽤ 对⽐…

实时通讯技术 WebRTC 介绍

WebRTC WebRTC&#xff08;Web Real-Time Communication&#xff09;是一个支持网页浏览器进行实时语音对话或视频对话的技术。 历史 2010年5月&#xff0c;Google以6820万美元收购VoIP软件开发商Global IP Solutions的GIPS引擎&#xff0c;并改为名为“WebRTC”。WebRTC使用…

【快速入门 LVGL】-- 5、Gui Guider界面移植到STM32工程

上篇&#xff0c;我们已学习&#xff1a;【快速入门 LVGL】-- 4、显示中文 工程中添加了两个按钮作示范。运行效果如图&#xff1a; 本篇&#xff1a;把Gui Guider设计好的界面&#xff0c;移植到STM32工程。 特别地&#xff1a; 在使用Gui Guider进行界面设计时&#xff0c;应…