讯飞编程思维题怎么做的

时间:2025-01-28 21:29:59 网络游戏

讯飞编程思维题的解答过程如下:

理解题目

题目描述了一个队列中的人,每个人要么面向左(用字符'L'表示),要么面向右(用字符'R'表示)。

当两个人面对面站立时,他们会发生争吵,然后其中一个人会被踢出队列。

目标是找出经过一系列的争吵后,队列中最少会剩下多少人。

分析问题

如果队列中只有'L'或只有'R',则队列中的人数不会减少。

当队列中有'L'和'R'时,会发生争吵,并且其中一个'L'和一个'R'会被移除,剩下的人取决于剩下的'L'和'R'的相对位置。

解题思路

从队列的左端开始向右找到第一个'R'的位置。

从队列的右端开始向左找到第一个'L'的位置。

这两个人及其之间的人最终只会剩下一个。

编写代码

使用C++编写代码,读取输入字符串并计算最少剩下的人数。

示例代码

```cpp

include

include

int main() {

std::string str;

while (std::cin >> str) {

int n = str.size();

int m = -1, k = -1;

for (int i = 0; i < n; ++i) {

if (str[i] == 'L') {

k = i;

}

if (m == -1 || k == -1 || k < m) {

std::cout<< n << std::endl;

} else {

std::cout << n - (k - m) << std::endl;

}

}

}

return 0;

}

```

解释代码

`m` 记录从左向右找到的第一个'R'的位置。

`k` 记录从右向左找到的第一个'L'的位置。

如果 `m` 和 `k` 都未找到,说明队列中全是同一方向的字符,输出队列原长度 `n`。

否则,输出 `n - (k - m)`,即去掉两个面对面的人及其之间的人后剩下的人数。

通过以上步骤,你可以解决讯飞编程思维题中的争吵问题。希望这个解答对你有所帮助!