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

WBOY
Lepaskan: 2023-09-05 09:25:05
ke hadapan
683 orang telah melayarinya

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;
    }
    Salin selepas log masuk

    Output
  • Jika kita menjalankan kod di atas, output berikut akan dihasilkan

    Single element after array reduction: 1187163713
    Salin selepas log masuk

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!

Label berkaitan:
sumber:tutorialspoint.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan