C++ 齿轮问题:最小删除齿轮数 (静态数组)
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;
}
代码说明:
- 使用静态数组
gear来保存每个齿轮的方向。 - 使用模运算
(i+1)%n处理第一个齿轮与最后一个齿轮之间的循环关系。 - 循环遍历每个齿轮,判断其方向是否与相邻齿轮方向相反。如果相反,则将计数器
count加 1。 - 最后输出
count的值,即最小需要删除的齿轮数量。
总结: 本篇文章提供了一个使用静态数组解决齿轮问题的 C++ 代码方案。代码简洁易懂,并充分利用了模运算来处理循环关系。希望本篇文章能够帮助你理解如何使用 C++ 解决类似问题。
原文地址: https://www.cveoy.top/t/topic/qxds 著作权归作者所有。请勿转载和采集!