C++ 齿轮问题:最小删除齿轮数 (静态数组)

题目描述: Goose Tattarrattat 有一个包含 n 个齿轮的机器,齿轮编号为 0 到 n-1,它们排成一个环。两个啮合的齿轮必须同时反向转动。

给你每个齿轮所需的转动方向,你需要找出最少需要删除的齿轮数量,使得所有剩余齿轮的转动方向与其相邻齿轮的转动方向相反。

输入格式:

  • 第一行:一个正整数 n,表示齿轮数量。
  • 第二行:一个长度为 n 的字符串,表示每个齿轮的方向,'L' 表示逆时针,'R' 表示顺时针。

输出格式:

  • 一个整数,表示最小需要删除的齿轮个数。

输入输出样例:

| 输入 (GearsDiv2.in) | 输出 (GearsDiv2.out) | |---|---| | 4 | LRRR | 1 | | 3 | RRR | 2 | | 4 | LRLR | 0 | | 16 | LRLLRRLLLRRRLLLL | 6 | | 50 | RRRRRRRRLRRRRRRRLRLRLLRLRLRLRRLRLRLLLRLRLLRLLRRLRRR | 14 |

代码实现:

#include <iostream>
#include <string>
using namespace std;

int main() {
    int n;
    cin >> n;
    
    string direction;
    cin >> direction;
    
    char gear[50];
    for (int i = 0; i < n; i++) {
        gear[i] = direction[i];
    }
    
    int count = 0;
    for (int i = 0; i < n; i++) {
        if ((gear[i] == 'L' && gear[(i+1)%n] != 'R') || (gear[i] == 'R' && gear[(i+1)%n] != 'L')) {
            count++;
        }
    }
    
    cout << count << endl;
    
    return 0;
}

代码说明:

  1. 使用静态数组 gear 来保存每个齿轮的方向。
  2. 使用模运算 (i+1)%n 处理第一个齿轮与最后一个齿轮之间的循环关系。
  3. 循环遍历每个齿轮,判断其方向是否与相邻齿轮方向相反。如果相反,则将计数器 count 加 1。
  4. 最后输出 count 的值,即最小需要删除的齿轮数量。

总结: 本篇文章提供了一个使用静态数组解决齿轮问题的 C++ 代码方案。代码简洁易懂,并充分利用了模运算来处理循环关系。希望本篇文章能够帮助你理解如何使用 C++ 解决类似问题。

C++ 齿轮问题:最小删除齿轮数 (静态数组)

原文地址: https://www.cveoy.top/t/topic/qxds 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录