题解 | 小红走网格

小红走网格

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
}

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

相关推荐

04-08 10:36
已编辑
华南理工大学 C++
点赞 评论 收藏
分享
Southyeung:我说一下我的看法(有冒犯实属抱歉):(1)简历不太美观,给我一种看都不想看的感觉,感觉字体还是排版问题;(2)numpy就一个基础包,机器学习算法是什么鬼?我感觉你把svm那些写上去都要好一点。(2)课程不要写,没人看,换成获奖经历;(3)项目太少了,至少2-3个,是在不行把网上学习的也写上去。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务