题目链接
最大公约数-腾讯2023笔试(codefun2000)
题目内容
现在塔子哥给出两个整数 a 和 b , 你现在有k 次操作,每次要么选择a,使其自增1,要么选择b使其自增1.
现在塔子哥想知道,执行完 k 次操作后, a 和 b 的最大公约数最大可以是多少?
输入描述
输出描述
输出 T 行,每行一个整数,代表一个测试用例的答案。
样例1
输入
5
1 6 3
3 5 7
8 9 3
12 23 5
17 31 17
输出
2
5
10
8
13
提示
题目求的是执行完 k 次操作后, a 和 b 的最大公约数最大可以是多少。就是说不用管中间a,b是怎么变换的,只要求执行k次操作后的结果
首先,执行完 k 次操作后,a的取值可能是a,a+1,a+2,…a+k-1,a+k,这里面的其中一个取值;而b的取值分别对应的是b+k,b+k-1,…,b+2,b+1,b;因此暴力枚举a的取值,分别求出a和b的最大公约数就可以
题解1
#include<bits/stdc++.h>
using namespace std;
int t, a, b, k, ans;
int gcd(int a, int b){
return b== 0?a: gcd(b, a%b);
}
int main(){
scanf("%d", &t);
while(t--){
scanf("%d%d%d", &a, &b, &k);
ans = 0;
for(int i = 0; i <= k; i++){
ans = max(ans, gcd(a+i, b+k-i));
}
printf("%d\n", ans);
}
return 0;
}