PAT 1088 三人行

题目链接和解题时的思路:

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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值