Rumah > pembangunan bahagian belakang > C++ > Ditulis dalam C++, cari bilangan empat kali ganda yang tiga sebutan pertamanya ialah jujukan aritmetik dan tiga sebutan terakhir ialah jujukan geometri.

Ditulis dalam C++, cari bilangan empat kali ganda yang tiga sebutan pertamanya ialah jujukan aritmetik dan tiga sebutan terakhir ialah jujukan geometri.

王林
Lepaskan: 2023-08-30 14:09:03
ke hadapan
1295 orang telah melayarinya

Ditulis dalam C++, cari bilangan empat kali ganda yang tiga sebutan pertamanya ialah jujukan aritmetik dan tiga sebutan terakhir ialah jujukan geometri.

Dalam artikel ini kami akan menerangkan semua cara yang mungkin untuk mencari kuarteron, di mana 3 sebutan pertama adalah dalam A.P. dan 3 sebutan terakhir adalah dalam G.P. Pertama, kami akan menerangkan definisi asas janjang aritmetik (A.P.) dan janjang geometri (G.P.).

Arithmetic Progression (A.P.) - Ia adalah urutan nombor di mana perbezaan sepunya (d) adalah sama atau malar, bermakna perbezaan dua nombor berturut-turut adalah malar. Contohnya: 1,3,5,7,9 |. d = 2

Geometrik Progression (G.P.) - Ini ialah urutan nombor di mana nisbah sepunya (r) adalah sama, yang bermaksud kita boleh mendarabkan yang sebelumnya nombor dengan dengan nombor tetap. Contohnya: 3, 6, 12, 24, .... |. r = 2

Dalam masalah ini, kita perlu menentukan berapa banyak indeks empat kali ganda (a, b, c) dalam susunan arr[] N integer , d). Akibatnya, arr[a], arr[b] dan arr[c] berada dalam A.P., manakala arr[d], arr[c] dan arr[b] berada dalam G.P. Semua empat tupel di dalamnya harus bersifat deterministik. Berikut adalah contoh -

Input : arr[ ] = { 9, 6, 4, 2, 1, 2 }
Output : 2
Explanation: Elements in the quadruples are at { 3, 2, 1, 0 } and { 5, 2, 1, 0 } indexes where quadruples are { 2, 4, 6, 9 } for both positions.

Input : arr[ ] = { 2, 6, 1, 4, 2 }
Output : 2
Explanation: Elements in the quadruples are at { 1, 3, 0, 2 } and { 1, 3, 4, 2 } indexes where quadruples are { 6, 4, 2, 1 } for both positions.
Salin selepas log masuk

Kaedah mencari penyelesaian

Sekarang kita akan menerangkan dua kaedah yang berbeza untuk mencari penyelesaian -

Kaedah brute force

Ini adalah kaedah mudah untuk menyelesaikan menggunakan empat gelung bersarang Soalan ini kemudiannya menyemak sama ada tiga elemen pertama adalah dalam A.P. Jika ya, semak sama ada 3 elemen terakhir berada dalam G.P. Jika ya, tambahkan 1 pada pembolehubah kiraan. Walau bagaimanapun, kaedah ini sangat memakan masa kerana kerumitan masanya ialah O(n4).

Kaedah yang cekap

< p>Dalam kaedah ini kita mula-mula mencari kiraan setiap elemen tatasusunan dan kemudian menganggap kedua-dua elemen ini sebagai nombor kedua dan ketiga dan menjalankan dua gelung bersarang kemudian yang pertama Elemen akan menjadi arr[b] – (arr[c ] – arr[b]) dan elemen keempat ialah arr[c] * arr[c] / arr[b].

Contoh

#include <bits/stdc++.h>
using namespace std;
int main (){
    unordered_map < int, int >map;
    int arr[] = { 2, 6, 1, 4, 2 };
    int size = sizeof (arr) / sizeof (arr[0]);
    // Processing every elent and increasing the count
    for (int a = 0; a < size; a++)
      map[arr[a]]++;

    int count = 0;
    // Running two nested loops for second & third element
    for (int b = 0; b < size; b++){
        for (int c = 0; c < size; c++){
            if (b == c)
                continue;
                // Decreasing the count
                map[arr[b]]--;
            map[arr[c]]--;
            // Finding the first element using common difference
            int first = arr[b] - (arr[c] - arr[b]);
            // Finding the fourth element using GP
            int fourth = (arr[c] * arr[c]) / arr[b];
            if ((arr[c] * arr[c]) % arr[b] == 0){
                // Increment count if not equal
                if (arr[b] != arr[c])
                    count += map[first] * map[fourth];
                else
                 count += map[first] * (map[fourth] - 1);
            }
            map[arr[b]]++;
            map[arr[c]]++;
        }
    }
    cout <<"Number of quadruples: " << count;
    return 0;
}
Salin selepas log masuk

Output

Number of quadruples: 2
Salin selepas log masuk

Penjelasan kod di atas

Dalam kod ini, kami menggunakan gabungan, menggunakan dua gelung bersarang untuk elemen kedua dan ketiga, dan menggunakan arr[a] – (arr[c] mencari elemen pertama – ​​arr[b]) dan elemen keempat arr[c] * arr[c] / arr[b]. Jadi, dengan mengekalkan unsur kedua dan ketiga tetap, bilangan kuaternion yang diindeks oleh A dan B ialah kiraan nombor pertama * nombor keempat. kerumitan masa kod di atas ialah O(n2).

Kesimpulan

Dalam artikel ini, kami menyelesaikan masalah mencari kuaternion di mana tiga sebutan pertama adalah dalam AP dan tiga sebutan terakhir dalam GP Kami berbincang menggunakan kaedah Bruteforce [ O(n4) ] dan Efficient [ O (n2 ) ] Dua cara untuk menyelesaikan masalah ini.

Kami menyelesaikan masalah ini menggunakan C++, ini juga boleh diselesaikan dalam pelbagai bahasa lain seperti java, python, C atau mana-mana bahasa pengaturcaraan lain.

Atas ialah kandungan terperinci Ditulis dalam C++, cari bilangan empat kali ganda yang tiga sebutan pertamanya ialah jujukan aritmetik dan tiga sebutan terakhir ialah jujukan geometri.. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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