活动地址: 牛客春招刷题训练营 - 编程打卡活动

#include<stdio.h>

long long gcdh(long long a, long long b) { // 辗转相除法球最大公约数

    long long t = a % b;

    while (t) {

        a = b;

        b = t;

        t = a % b;

    }

    return b;// 返回最大公约数

}

long long gcdh3(long long a, long long b, long long c) {

    long long x = gcdh(a, b);

    long long y = gcdh(b, c); //求三个数的最大公约数

    long long z = gcdh(x, y);

    return z;

}

int main() {

    long long h, n;

    scanf("%lld %lld", &n, &h);// 输入

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

        long long x, y, z;

        scanf("%lld %lld %lld", &x, &y, &z);

        long long t = 2 * h - z;// 求照射点z方向的坐标

        long long g = gcdh3(x, y, t);

        x /= g, y /= g, t /= g; // 需保证 gcd(i,j,k)==1

        printf("%lld %lld %lld\n", x, y, t); // 输出方向

    }

    return 0;

}

活动地址: 牛客春招刷题训练营 - 编程打卡活动