在这个问题中,我们给了三个值A,B和N。我们的任务是找到满足给定方程的n个正整数。
问题描述-我们需要找到满足两个方程的N个正值,
x12 + x22 + … xn2 ≥ A x1 + x2 + … xn ≤ B
如果存在,则打印n个值,否则打印-1。
让我们举个例子来了解这个问题,
N = 4, A = 65, B = 16输出结果
1 1 1 8
等式是-
12 + 12 + 12 + 82 = 1 + 1 + 1 + 64 = 67 ≥ 65 1 + 1 + 1 + 8 = 11 < 16
解决这个问题的简单方法是最大化平方和。想法是使用一个数作为主数来最大化平方和,而使用另一个数作为1。因此,使用该数可以最大化平方和并满足求和条件。
该程序说明了我们解决方案的工作原理,
#include <bits/stdc++.h> using namespace std; void findNintegers(int N, int A, int B) { vector<int> numbers; for (int i = 0; i < N - 1; i++) numbers.push_back(1); if (B - (N - 1) <= 0) { cout << "-1"; return; } numbers.push_back(B - (N - 1)); int vals = 0; for (int i = 0; i < N; i++) vals += numbers[i] * numbers[i]; if (vals < A) { cout << "-1"; return; } for (int i = 0; i < N; i++) cout << numbers[i] << " "; } int main(){ int N = 4, A = 65, B = 17; cout<<N<<" 满足给定方程的正整数是 "; findNintegers(N, A, B); return 0; }输出结果
4 满足给定方程的正整数是 1 1 1 14