Top.Mail.Ru
Ответы

ПОМОГИТЕ ПРОШУ С ЗАДАЧЕЙ С++

ПОМОГИТЕ С ЗАДАЧЕЙ ПО С++ ДАЮ 50 БАЛЛОВ из чата гпт не работает код



У нас есть три набора чисел - А, В и С. Можно ли взять из каждого набора по одному числу а, b и с так,
что для заданного числа К выполняется равенство а^2 + b^2 + c^2 = k?
В первой строке записаны четыре натуральных числа n, m, t и к - размеры каждого из трех наборов и число k
Выведите три числа: номера чисел из каждого набора согласно заданному во входных данных порядку, которые
подходят под указанное равенство. Нумерация чисел в наборах начинается с единицы. Если правильных ответов
несколько, то выведите любой из них.


Вход
3 4 4 3
2 1 3
1 2 2 1
2 3 1 2
Вывод
2 1 3

По дате
По Рейтингу
Аватар пользователя
Новичок
5мес
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
 #include <array> 
#include <iostream> 
#include <map>

using namespace std;

class SumSquares { 
private: 
    static const size_t length = 3; 
public: 
    using key_t = unsigned; 
    using value_t = size_t; 
    using map_t = map<key_t, value_t>; 
    using box_t = array<map_t, length>; 
    using item_t = pair<key_t, value_t>; 
    using result_t = pair<bool, array<item_t, length>>; 
    using values_t = array<value_t, length>; 
private: 
    key_t target = 0; 
    box_t box; 
    map_t fill(istream& inp, const value_t count) { 
        map_t item; 
        key_t key; 
        for (value_t value = 0; value < count; ++value) { 
            inp >> key; 
            if (!item.contains(key) && key * key < target) { 
                item.insert({ key, value + 1 }); 
            } 
        } 
        return item; 
    } 
    static bool is_not_exists(key_t key) { 
        while (key % 4 == 0) key /= 4; 
        return key % 8 == 7; 
    } 
    bool is_exists(const key_t a, const key_t b, const key_t c) const { 
        return target == a * a + b * b + c * c; 
    } 
    result_t result() const { 
        result_t res{}; 
        for (const auto& a : box[0]) { 
            res.second[0] = a; 
            for (const auto& b : box[1]) { 
                res.second[1] = b; 
                for (const auto& c : box[2]) { 
                    res.second[2] = c; 
                    if (is_exists(a.first, b.first, c.first)) { 
                        res.first = true; 
                        return res; 
                    } 
                } 
            } 
        } 
        return res; 
    } 
    friend istream& operator>>(istream& inp, SumSquares& ss) { 
        values_t values{}; 
        for (auto& value : values) inp >> value; 
        inp >> ss.target; 
        size_t i = 0; 
        for (auto& item : ss.box) { 
            item = ss.fill(inp, values[i]); 
            ++i; 
        } 
        return inp; 
    } 
    friend ostream& operator<<(ostream& out, const SumSquares& ss) { 
        if (SumSquares::is_not_exists(ss.target)) return out << "-1"; 
        const auto& [status, result] = ss.result(); 
        if (!status) return out << "-1"; 
        for (const auto& [key, value] : result) out << value << ' '; 
        return out; 
    } 
};

int main() { 
    SumSquares sum_squares; 
    cin >> sum_squares; 
    cout << sum_squares << '\n'; 
} 
Аватар пользователя
Мудрец
5мес

Сам решай