成都市网站开发公司服务,新网站一直不被收录,led视频网站建设,网站流量很少学习编程就得循环渐进#xff0c;扎实基础#xff0c;勿在浮沙筑高台 循环渐进Forward-CSDN博客 目录 循环渐进Forward-CSDN博客
第一题#xff1a;游游的you 思路#xff1a;
第二题#xff1a;腐烂的苹果
思路#xff1a;
第三题#xff1a;孩子们的游戏
思路扎实基础勿在浮沙筑高台 循环渐进Forward-CSDN博客 目录 循环渐进Forward-CSDN博客
第一题游游的you 思路
第二题腐烂的苹果
思路
第三题孩子们的游戏
思路 第一题游游的you 牛客网做题链接游游的you__牛客网 (nowcoder.com) 思路 这是一道简单的模拟题我们要找出三个字符y、o、u中最少的那个字符的数量这个数量n表示最多能组成多少个you。然后我们计算o字符的总数减去n得到剩余的o字符数量。如果剩余的o字符少于2个那么就不需要进一步操作。如果剩余的o字符数量是2个或更多我们可以在结果上加1对于2个o加2对于3个o以此类推。最终的结果是n加上剩余o字符数量减去1。
#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;
} 第二题腐烂的苹果 牛客网做题链接腐烂的苹果_牛客题霸_牛客网 (nowcoder.com) 思路
这个问题可以通过广度优先搜索BFS来解决因为我们需要以最短的时间传播腐烂的苹果。我们可以将每个腐烂的苹果看作是一个源点然后从这些源点同时开始传播。 初始化队列 创建一个队列并将所有初始状态为腐烂的苹果的位置坐标加入到队列中。这些腐烂的苹果是腐烂过程开始的地方。 广度优先搜索BFS 对队列中的每个元素即腐烂的苹果位置进行处理 检查该位置的四个直接邻居上、下、左、右。如果邻居是一个完好的苹果通常用1表示则将其状态更改为腐烂例如用2表示并将该邻居的位置加入到队列中。确保每个位置只被加入队列一次避免重复处理。 记录时间 维护一个变量来记录传播的层数这代表分钟数。每次从队列中取出一个元素进行处理时层数加1。 检查完好的苹果 当队列为空时停止搜索。遍历整个网格检查是否还有完好的苹果。如果发现还有完好的苹果说明这些苹果无法被腐烂的苹果触及因此返回-1。如果所有苹果都已经腐烂返回记录的层数即传播所需的总分钟数。 同时注意同一点不能重复入队列以及每次取front()都要对应pop()移除对头否则会导致 内存超限 控制出队列的循环永无止境从而程序超时判否。
class Solution {public:int m, n;int dx[4] {0, 0, 1, -1};int dy[4] {1, -1, 0, 0};queuepairint, int q;bool vis[1001][1001];int ret;void bfs(vectorvectorint 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(vectorvectorint 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;}
};};第三题孩子们的游戏 牛客网做题链接孩子们的游戏(圆圈中最后剩下的数)_牛客题霸_牛客网 (nowcoder.com) 思路 一道约瑟夫环的应用版本一样的思路。 public int LastRemaining_Solution (int n, int m) {//初始化模拟的列表ListInteger list new ArrayList();for(int i0;in;i){list.add(i);}int start 0;//直到剩最后一个才返回while(list.size() !1){int size list.size();//计算每次要移除的坐标,就是//上一次的起始坐标start这次数的新坐标m%size//再将这两个和取余%size,不然可能会超出size范围//最终减去1就是要移除的位置start (startm%size)%size-1;//需要考虑如果二者之和size如果相同的话,那么余数是0的特殊情况start start0?size-1:start;//移除后进行下一个循环list.remove(start);}//返回剩下的最后一个即可return list.get(0);}学习编程就得循环渐进扎实基础勿在浮沙筑高台