文章目录
题目链接和解题时的思路:
PAT三人行题目链接
这道题像是一个数学题,有解方程内味儿,还好给了解的范围,所以可以通过遍历来解题,一开始没考虑到有多种解的情况。只想保存一个解,后来发现无法通过break,连续跳出两层for循环,后来想到可以通过vector来保存答案。这个题我踩了两个坑,一是测试点3是甲的个位是可以为0的,而是测试点4是丙的成绩是四舍五入的。
代码:
#include <iostream>
#include <vector>
#include <array>
#include <cmath>
using namespace std;
struct Node {
int a, b, c;
};
vector<Node> Data;
int main() {
auto m{0};
auto x{0.}, y{0.};
cin >> m >> x >> y;
int i, j;
for (i = 1; i < 10; ++i) {
for (j = 0; j < 10; ++j)
if ((i * 10 + j) * y == (j * 10 + i) * (x + y) ||
(i * 10 + j) * y == (j * 10 + i) * (y - x)) {
Node node{i * 10 + j, j * 10 + i, lround((j * 10 + i) / (y))};
Data.emplace_back(node);
break;
}
}
if (!Data.empty()) {
Node node{Data.back()};
array<int, 3> it{node.a, node.b, node.c};
cout << it.front();
for (const auto &item:it)
if (item > m) cout << " Cong";
else if (item < m) cout << " Gai";
else cout << " Ping";
} else cout << "No Solution";
return 0;
}