Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

หาคำตอบจำนวนเต็มบวกสำหรับสมการที่กำหนดใน C++

ปัญหา

ได้รับฟังก์ชัน f(x, y) หาคู่ (x, y) ทั้งหมดที่ f(x, y) = z โดย z กำหนดให้ x, y เป็นจำนวนเต็มบวก ฟังก์ชันเพิ่มขึ้นเรื่อยๆ: f(x,y) < f(x+1,y) และ f(x,y) < f(x,y+1)

วิธีแก้

Brute Force: ลูป i=1..1000, j=1..1000 ถ้า f(i,j)==z เก็บคู่ (i,j)

Function ID: 1 = Addition, 2 = Multiplication พร้อมค่า z

ตัวอย่างโค้ด

#include <bits/stdc++.h>
using namespace std;

void print_vector(vector<vector<int>> v) {
    cout << "[";
    for (int i = 0; i < v.size(); i++) {
        cout << "[";
        for (int j = 0; j < v[i].size(); j++)
            cout << v[i][j] << ", ";
        cout << "],";
    }
    cout << "]" << endl;
}

class CustomFunction {
    int id;
public:
    CustomFunction(int id) { this->id = id; }
    int f(int x, int y) {
        if (id == 1) return y + x;
        else if (id == 2) return y * x;
        return 0;
    }
};

class Solution {
public:
    vector<vector<int>> findSolution(CustomFunction& c, int z) {
        vector<vector<int>> ans;
        for (int i = 1; i <= 1000; i++)
            for (int j = 1; j <= 1000; j++)
                if (c.f(i, j) == z) {
                    vector<int> t = {i, j};
                    ans.push_back(t);
                }
        return ans;
    }
};

int main() {
    Solution ob;
    CustomFunction c(1);
    print_vector(ob.findSolution(c, 7));
}

อินพุต

1 7

เอาต์พุต

[[1, 6, ],[2, 5, ],[3, 4, ],[4, 3, ],[5, 2, ],[6, 1, ],]

คำอธิบาย

Function ID 1 = Addition: x + y = 7 → คู่ (1,6), (2,5), (3,4), (4,3), (5,2), (6,1)

Function ID 2 = Multiplication: x * y = z

ข้อจำกัด x,y ≤ 1000 จากโจทย์