이 문제에서 우리는 세 개의 값 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<<" positive integers that satisfy the given equations are ";
findNintegers(N, A, B);
return 0;
} 출력
4 positive integers that satisfy the given equations are 1 1 1 14