>  기사  >  백엔드 개발  >  C++로 구현된 주어진 연산을 사용하여 배열을 정수로 줄입니다.

C++로 구현된 주어진 연산을 사용하여 배열을 정수로 줄입니다.

WBOY
WBOY앞으로
2023-09-05 09:25:05683검색

C++로 구현된 주어진 연산을 사용하여 배열을 정수로 줄입니다.

정수 변수 Number를 입력으로 제공합니다. 1부터 Number까지의 범위에 있는 요소를 포함하는 배열을 고려해 보겠습니다. 요소의 순서는 임의적일 수 있습니다. 배열에서 1번 연산을 수행하면 연산은 다음과 같습니다.

  • 배열에서 두 요소 A와 B를 선택합니다.

  • 배열에서 A와 B를 제거합니다.

  • A와 B를 바꿉니다. 제곱합이 배열에 추가됩니다.

결국 우리는 단일 정수 값을 얻습니다. 목표는 해당 요소에 대해 가능한 최대값을 찾는 것입니다.

Using Priority Queue

  • 최종 결과를 최대화하려면 A와 B를 선택하여 최대한 크게 만들어야 합니다.

  • 가장 큰 A와 B를 찾기 위해 우선순위 큐를 사용하여 그 안에 요소 값을 저장합니다.

  • 우선순위 대기열은 요소를 내림차순으로 저장합니다.

  • 최상위 요소의 값이 가장 큰 등입니다. 따라서 두 요소를 모두 팝한 후 해당 사각형을 다시 대기열에 넣습니다.

  • 원하는 결과를 얻으려면 1번을 누르고 누르세요.

입력 - 숫자=2

출력 - 배열 축소 후 단일 요소: 5

설명 - 배열의 요소가 [1 2]라고 가정

우선순위 큐 : 2 1

A=5, B=4 : A2+B2=1+4=5

마지막 요소 : 5

Input - Number=5

출력 - 배열 축소 후 단일 요소: 5

설명- 배열의 요소가 [5 1 2 4 3]

우선순위 큐에 삽입된 후: 5 4 3 2 1

A=5라고 가정합니다. , B=4: A 2+B2=25+16=41 : 41 3 2 1

A=41, B=3 : A2+B2=1681+9=1690 : 1690 2 1

A=1690, B=2 : A2+B2=1681+4=2856104 : 2856104 1

A=2856104 , B=1 : A2+B2 =1187163712+1= 1187163713 : 1187163713

마지막 요소: 1187163713

아래 프로그램에서 사용한 방법은 다음과 같습니다

이 방법에서는 배열의 요소를 내림차순으로 저장하도록 우선순위 큐를 설정했습니다. 두 개의 가장 큰 요소를 팝하고 하나의 값만 남을 때까지 해당 제곱의 합을 다시 큐에 푸시합니다.

  • 입력 변수 Number를 가져옵니다.

  • 결과의 데이터 유형을 긴 정수로 설정 - lli

  • 함수 축소Array(int Num)는 입력 숫자를 받아들이고 위 연산을 사용하여 계산된 가장 큰 단일 정수를 반환합니다.

  • 우선순위 대기열 pQueue를 사용하세요.

  • while 루프를 사용하여 1부터 N까지의 숫자를 pQueue에 채웁니다.

  • i

  • 이제 pQueue는 1부터 N까지의 정수를 크기 N으로 내림차순으로 저장합니다.

  • while 루프를 사용하여 크기가 1보다 클 때까지 pQueue를 순회합니다.

  • 최대값을 var1=pQueue.top()으로 설정하고 팝합니다.

  • 다음 최대값을 var2=pQueue.top()으로 설정하고 팝합니다.

  • var1을 정사각형으로 설정하고 var2를 정사각형으로 설정합니다.

  • var1+var2를 pQueue에 다시 푸시합니다.

  • while 루프가 끝나면 최상위 요소를 반환합니다.

  • 메인 함수에서 결과를 인쇄하세요.

Example

#include <bits/stdc++.h>
using namespace std;
#define lli long long int
int reduceArray(int Num){
   priority_queue<lli> pQueue;
   int i=1;
   while(i<=Num){
      pQueue.push(i);
      i=i+1;
   }
   while (pQueue.size() > 1) {
      lli var1 = pQueue.top();
      pQueue.pop();
      lli var2 = pQueue.top();
      pQueue.pop();
      var1=var1*var1;
      var2=var2*var2;
      pQueue.push(var1+var2);
   }
   return pQueue.top();
}
int main(){
   int Number = 5;
   cout<<"Single element after array reduction: "<<reduceArray(Number);
   return 0;
}

Output

위 코드를 실행하면 다음과 같은 출력이 생성됩니다

Single element after array reduction: 1187163713

위 내용은 C++로 구현된 주어진 연산을 사용하여 배열을 정수로 줄입니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 tutorialspoint.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제