value
题目背景
从前有个荣光的王国,小 A 是里面的国王,今天他要赐予他的子民以价值。
题目描述
小 A 发现他的国家的价值可以使用 x , y , z , w x, y, z, w x,y,z,w 四个非负整数衡量。但是为了维持平衡,现在他想要让 x x x 和 z z z, y y y 和 w w w 保持一个相对稳定的比例。
现在他想要知道,是否可以找到一个正整数 c c c,使得 x = z × c x = z \times c x=z×c 且 y = w × c y = w \times c y=w×c。请你帮助他找到这个正整数。
输入格式
一行四个整数 x , y , z , w x, y, z, w x,y,z,w。
输出格式
一行一个整数。如果可以找到一个正整数 c c c 满足题目的条件,则输出这个 c c c。否则输出 − 1 -1 −1。
样例 #1
样例输入 #1
9 6 3 2
样例输出 #1
3
样例 #2
样例输入 #2
7 2 3 5
样例输出 #2
-1
样例 #3
样例输入 #3
0 6 0 2
样例输出 #3
3
提示
样例解释
- 可以发现 9 = 3 × 3 , 6 = 3 × 2 9 = 3 \times 3, 6 = 3 \times 2 9=3×3,6=3×2, 3 3 3 可以成为样例 1 的 c c c。
- 对样例 2,不能找到任何一个正整数 c c c 满足题目条件。
- 需要注意 x , y , z , w x, y, z, w x,y,z,w 有可能是 0 0 0。
数据规模与约定
对 100 % 100\% 100% 的数据,保证 0 ≤ x , y , z , w ≤ 1 0 3 0 \leq x, y, z, w \leq 10^3 0≤x,y,z,w≤103,且 x , y , z , w x, y, z, w x,y,z,w 不同时为 0 0 0。、
不难证明在给定的情况下答案 c c c 只有至多一个。
#include <iostream>
using namespace std;
int main() {
int x, y, z, w;
cin >> x >> y >> z >> w;
// 处理 x 和 z 的关系
if (x == 0 && z == 0) {
// x 和 z 同时为0,但题目要求不同时为0,所以这种情况不会发生
// 但为了代码的完整性,这里可以添加一个错误处理或继续执行
cout << "-1" << endl;
return 0;
}
if (x == 0 || z == 0) {
// x 或 z 为0,不存在满足条件的 c
cout << "-1" << endl;
return 0;
}
int c_xz = x / z; // 注意这里使用整数除法
if (x % z != 0) {
// x 不是 z 的整数倍
cout << "-1" << endl;
return 0;
}
// 处理 y 和 w 的关系
if (y == 0 && w == 0) {
// y 和 w 同时为0,但不影响 x 和 z 的结果,所以继续执行
}
if (y == 0 || w == 0) {
// y 或 w 为0,但我们需要检查另一个是否也为0且x/z的结果是否有效
if (y == 0 && w != 0 || y != 0 && w == 0) {
// 只有一个为0,且x/z的结果有效,但y和w的比例不满足,所以答案为-1
cout << "-1" << endl;
return 0;
}
// 如果y和w都为0,且x/z的结果有效,则c可以是任意正整数(但题目只要求一个),这里取c_xz
}
int c_yw = y / w; // 注意这里也使用整数除法
if (y % w != 0) {
// y 不是 w 的整数倍
cout << "-1" << endl;
return 0;
}
// 检查通过x/z和y/w得到的c是否相同
if (c_xz == c_yw) {
cout << c_xz << endl;
} else {
cout << "-1" << endl;
}
return 0;
}