代码求调,急!!
  • 板块学术版
  • 楼主Ellison2012
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/5/9 18:19
  • 上次更新2024/5/9 20:24:02
查看原帖
代码求调,急!!
1022959
Ellison2012楼主2024/5/9 18:19
#include <iostream>
#include <string>

using namespace std;

int main() {
    int n, m;
    cin >> n >> m;  // 输入桥的长度和参与者数量

    string glasses;
    cin >> glasses;  // 输入每次钢化玻璃的位置

    int passed = 0;  // 记录通过的参与者数量

    // 第一个人从左边开始
    bool is_left = true;
    char last_glass = 'z';  // 初始位置

    for (int i = 0; i < m; ++i) {
        // 如果当前在左边玻璃且下一块是钢化玻璃,或者当前在右边玻璃且上一块是钢化玻璃,则通过
        if ((is_left && glasses[i % n] == 'z' && last_glass == 'y') ||
            (!is_left && glasses[(i + n - 1) % n] == 'y' && last_glass == 'z')) {
            passed++;
        }

        // 更新上一块玻璃的位置
        last_glass = is_left ? 'z' : 'y';

        // 切换方向
        is_left = !is_left;
    }

    cout << passed << endl;  // 输出通过的参与者数量

    return 0;
}

问题描述

在nana游戏中有一个过玻璃桥的游戏,它是由 2×n 块玻璃组成的玻璃桥,每一次左右两边都有一块钢化玻璃和一块普通玻璃组成,显然走到普通玻璃就会掉下去,掉下去的人需要写一千道编程的题目。现在有聪明的 m 个学生想要尽可能多的通过桥,所以在不确定跳哪个玻璃的情况下,他们采用左右左右的方法前行。

即在不确定跳哪个玻璃的情况下,如果你现在在左边玻璃,则下一次跳到右边玻璃;反之如果在右边玻璃则下一次跳左边玻璃,同时成员间信息共享,后面的人知道前面的人的情况。

第一名成员选择跳左边玻璃来开始游戏。现在你已知每一次的哪块是钢化玻璃,用 y 表示右边是钢化玻璃, z 表示左边是钢化玻璃,问能通过这关的玩家有多少人。

输入格式

第一行两个整数

n,m : 表示桥的长度为 n,有 m 个参赛玩家。

第二行 n 个字母表示每次钢化玻璃是哪块。

输出格式

输出可以到达终点的人数。

样例输入

输入数据 1

5 4

zyzyz

输出数据 1

4

样例解释

第一个人按照左右左右左的方式既可以通关了,后面的人知道第一个人怎么跳的,自然也会通关,所以答案是 4.

2024/5/9 18:19
加载中...