Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Kurangkan tatasusunan kepada integer menggunakan operasi yang diberikan, dilaksanakan dalam C++

Kurangkan tatasusunan kepada integer menggunakan operasi yang diberikan, dilaksanakan dalam C++

WBOY
WBOYke hadapan
2023-09-05 09:25:05676semak imbas

Kurangkan tatasusunan kepada integer menggunakan operasi yang diberikan, dilaksanakan dalam C++

Diberi pembolehubah integer Nombor sebagai input. Mari kita pertimbangkan tatasusunan yang mengandungi unsur dalam julat 1 hingga Nombor Susunan unsur boleh sewenang-wenangnya. Jika kita melakukan operasi Nombor-1 pada tatasusunan, operasinya adalah seperti berikut:

  • Kami memilih dua elemen A dan B daripada tatasusunan

  • Keluarkan A dan B daripada tatasusunan

  • Gantikan A dan B Jumlah kuasa dua ditambah pada tatasusunan

Akhirnya kita mendapat nilai integer tunggal matlamatnya adalah untuk mencari nilai maksimum yang mungkin untuk elemen itu.

Menggunakan Gilir Keutamaan

  • Untuk memaksimumkan hasil akhir, kita perlu memilih A dan B untuk menjadikannya sebesar mungkin.

  • Untuk mencari A dan B terbesar, kami akan menggunakan baris gilir keutamaan untuk menyimpan nilai elemen di dalamnya.

  • Baris gilir keutamaan menyimpan elemen dalam susunan menurun.

  • Elemen paling atas mempunyai nilai terbesar, dan seterusnya. Jadi selepas muncul kedua-dua elemen, kami akan menolak petak mereka ke dalam baris gilir sekali lagi.

  • Akan pop dan tolak Nombor-1 kali untuk mendapatkan hasil yang diinginkan.

example

Input - Number = 2

Output - Unsur tunggal selepas pengurangan array: 5

planation - Anggaplah bahawa unsur-unsur dalam array adalah [1 2]

selepas memasukkan masuk ke dalam baris gilir keutamaan : 2 1

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

Elemen terakhir: 5

Input

- Nombor=5

Output - Elemen tunggal selepas pengurangan tatasusunan: 5

Penjelasan- Andaikan bahawa elemen dalam tatasusunan ialah [5 1 2 4 3]

Selepas dimasukkan ke dalam baris gilir keutamaan: 5 4 3 2 1

A

, 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=285612 : . Pop dua elemen terbesar dan tolak jumlah petak mereka kembali ke dalam baris gilir sehingga hanya tinggal satu nilai.

Dapatkan nombor pembolehubah input.

Tetapkan jenis data hasil kepada integer panjang panjang - lli

  • Fungsi reduceArray(int Num) menerima nombor input dan mengembalikan integer tunggal terbesar yang dikira menggunakan operasi di atas.

  • Gunakan pQueue baris gilir keutamaan.

  • Gunakan gelung sementara untuk mengisi nombor 1 hingga N ke dalam pQueue.

  • Apabila i
  • Kini pQueue menyimpan integer 1 hingga N dalam tertib menurun, dengan saiz N.

  • Gunakan gelung sementara untuk melintasi pQueue sehingga saiznya >= 1.

  • Tetapkan nilai maksimum kepada var1=pQueue.top() dan popkannya.

  • Tetapkan nilai maksimum seterusnya kepada var2=pQueue.top() dan popkannya.

  • Tetapkan var1 kepada segi empat sama dan tetapkan var2 kepada segi empat samanya.

  • Tolak var1+var2 ke dalam pQueue sekali lagi.

  • Di penghujung gelung sementara, kembalikan elemen atas.

  • Cetak hasil dalam fungsi utama.

  • Contoh

    #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
  • Jika kita menjalankan kod di atas, output berikut akan dihasilkan

    Single element after array reduction: 1187163713

Atas ialah kandungan terperinci Kurangkan tatasusunan kepada integer menggunakan operasi yang diberikan, dilaksanakan dalam C++. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:tutorialspoint.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam