题解 | 小红走网格

小红走网格

https://www.nowcoder.com/practice/43498993d39246c58e35ca715faea7ab

#include <iostream> // 包含输入输出流相关的头文件
#include <vector>    // 包含 vector 容器相关的头文件
using namespace std; // 使用标准命名空间,避免重复写 std::

// 自定义 gcd 函数,计算两个数的最大公约数
int gcd(int a, int b) {
    return b == 0 ? a : gcd(b, a % b); // 使用递归方式计算最大公约数
}

// 判断是否可以到达目标位置的函数
bool canReach(int x, int y, int a, int b, int c, int d) {
    // 判断x方向是否可达:x 必须是 c 和 d 的最大公约数的倍数
    if (x % gcd(c, d) != 0) {
        return false; // 如果 x 不是 gcd(c, d) 的倍数,返回 false
    }
    // 判断y方向是否可达:y 必须是 a 和 b 的最大公约数的倍数
    if (y % gcd(a, b) != 0) {
        return false; // 如果 y 不是 gcd(a, b) 的倍数,返回 false
    }
    return true; // 如果 x 和 y 都满足条件,返回 true
}

int main() {
    int T; // 定义变量 T,表示测试数据的组数
    cin >> T; // 从标准输入读取测试数据组数 T

    // 创建一个二维向量 data,用于存储每组测试数据
    vector<vector<int>> data(T, vector<int>(6)); // 每组数据包含 6 个整数

    // 读取每组测试数据
    for (int i = 0; i < T; ++i) { // 遍历每组测试数据
        for (int j = 0; j < 6; ++j) { // 遍历每组数据中的 6 个整数
            cin >> data[i][j]; // 从标准输入读取每个整数并存储到 data 中
        }
    }

    // 对每组测试数据判断是否可以到达目标位置
    for (int i = 0; i < T; ++i) { // 遍历每组测试数据
        // 从 data 中提取每组数据的 6 个整数
        int x = data[i][0], y = data[i][1], a = data[i][2], b = data[i][3], c = data[i][4], d = data[i][5];
        if (canReach(x, y, a, b, c, d)) { // 调用 canReach 函数判断是否可以到达目标位置
            cout << "YES" << endl; // 如果可以到达,输出 "YES"
        } else {
            cout << "NO" << endl; // 如果不能到达,输出 "NO"
        }
    }

    return 0; // 程序正常结束,返回 0
}

#笔试编程题##牛客创作赏金赛#
全部评论

相关推荐

09-19 13:59
门头沟学院 Java
用微笑面对困难:Trae一下,如果真成了,他用了直接发字节起诉代码版权,,这个代码不商用是没问题的如果没成也是情理之中的。
点赞 评论 收藏
分享
内向的柠檬精在研究求...:这不才9月吗,26到明年毕业前能一直找啊,能拿下提前批,转正的,offer打牌的都是有两把刷子的,为什么非要跟他们比。如果别人是9本硕+金牌+好几段大厂实习呢?如果别人是双非通天代呢?如果别人是速通哥呢?,做好自己就行了,我们做不到他们一样提前杀死比赛,但晚点到终点也没啥关系吧
双非应该如何逆袭?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务