Rumah > pembangunan bahagian belakang > C++ > Nombor segi tiga terkecil lebih besar daripada p

Nombor segi tiga terkecil lebih besar daripada p

王林
Lepaskan: 2023-09-20 19:13:02
ke hadapan
1261 orang telah melayarinya

Nombor segi tiga terkecil lebih besar daripada p

Kami akan membincangkan nombor segi tiga dan cara mencari nombor segi tiga terkecil yang hanya lebih besar daripada nombor "num" yang diberikan. Mari kita bincangkan dahulu apakah nombor trigonometri, dan kemudian cari nombor trigonometri terkecil yang lebih besar daripada "bilangan"

Kita akan melihat dua pendekatan berbeza untuk masalah yang sama. Dalam kaedah pertama kita akan menjalankan gelung mudah untuk menjana output, manakala dalam kaedah kedua kita akan mula-mula menjana formula umum untuk mengira nombor yang diperlukan dan kemudian terus menggunakan formula itu untuk mendapatkan nombor Segitiga minimum. p>

Pernyataan Masalah

Kita perlu mencari bilangan segitiga terkecil yang hanya lebih besar daripada "num".

Kami mempunyai beberapa kotak dengan bola. Bilangan bola yang terkandung dalam kotak adalah nombor segi tiga yang berbeza untuk semua kotak. Kotak-kotak itu bernombor dari 1 hingga n. Kita perlu mengetahui kotak mana yang akan mengandungi bilangan bola minimum selepas mengeluarkan bola "bilangan" dari kotak.

Mari kita fahami ini melalui contoh

Input number was: num = 5
Salin selepas log masuk

Kita perlu mengetahui kotak mana yang mempunyai bilangan bola paling sedikit selepas mengeluarkan 5 bola

Output:3rd box will contain a minimum of balls after removing 4 balls.
Salin selepas log masuk

Penyelesaian untuk contoh ini -

Boxes with number of balls: {1 3 6 10 ....}
Box 3 will contain only 1 ball after removing 4 balls from it.
Salin selepas log masuk

Apakah nombor trigonometri?

Nombor segi tiga ialah nombor yang boleh diwakili dalam bentuk grid segi tiga sama sisi. Bilangan mata dalam satu baris sentiasa sama dengan nombor baris, iaitu baris pertama akan mengandungi 1 mata, baris kedua akan mengandungi 2 mata, dan seterusnya. Beberapa nombor segi tiga ialah: 1, 3, 6, 10, 15…. Sekarang mari kita terbitkan formula untuk nombor segi tiga ke-

Kita tahu bahawa baris ke-n bagi nombor segi tiga mengandungi n mata, jadi nombor segi tiga boleh dinyatakan sebagai jumlah mata dalam setiap baris. Kita juga tahu bahawa nombor trigonometri ke-n mempunyai n baris, jadi nombor trigonometri ke-n boleh diberikan dengan hasil tambah n nombor asli pertama.

Kaedah 1: (Kaedah terus)

Dalam kaedah ini kita akan menjalankan gelung dan mengira perbezaan antara nombor yang diberikan dan nombor trigonometri ke-n, apabila kita mendapat perbezaan >= 0 kita akan mendapat nombor kotak yang diperlukan supaya kita akan memotong gelung. < /p>

Untuk nombor trigonometri, kami akan terus menambah n pada nombor trigonometri ke (n-1) sedia ada untuk mengira nilai nombor trigonometri seterusnya.

Algoritma

  • Langkah 1 - Mulakan pembolehubah nombor_segi tiga kepada 0.

  • Langkah 2 - Jalankan gelung for dan terus tambah n untuk setiap lelaran.

  • Langkah 3 - Teruskan mengira perbezaan antara nombor segi tiga dengan nombor "num" yang diberi.

  • Langkah 4 - Bila dah dapat perbezaan >=0, kita akan print n sebagai nombor kotak yang dikehendaki.

Contoh

Perlaksanaan kaedah ini dalam C++ adalah seperti berikut -

#include <iostream>
using namespace std;
int main(){
   int num = 1234;
   int triangular_number = 0;
   for (int n=1; triangular_number<=num; n++){
      triangular_number = triangular_number + n;
      if((triangular_number-num)>=0){
         cout<<"The smallest triangular number larger than "<<num<<" is "<<n;
         return 0;
      }
   }
}
Salin selepas log masuk

Output

The smallest triangular number larger than 1234 is 50
Salin selepas log masuk
Salin selepas log masuk

Kaedah 2: Kaedah berasaskan formula

Dalam kaedah ini kita mula-mula menjana formula am untuk mengira nombor yang diperlukan dan kemudian terus menggunakan formula untuk mendapatkan bilangan segitiga terkecil yang hanya lebih besar daripada nombor yang diberikan.

Nombor segi tiga nombor kotak ke-n diberi oleh -

Triangular number = (n*(n+1))/2
Salin selepas log masuk

Dapatkan nombor kotak terkecil "n" supaya bilangan segi tiga >= nombor.

i.e. (n*(n+1))/2 >= num
Salin selepas log masuk

Ini bermakna kita kena selesaikan -

n<sup>2</sup> + n – 2*num >= 0
Salin selepas log masuk

Menggunakan persamaan ini, kita mendapat

n = ceil( (sqrt(8*num+1)-1)/2 )
Salin selepas log masuk

Contoh

Kod untuk kaedah ini diberikan di bawah -

#include<bits/stdc++.h>
using namespace std;
int boxnum(int num){
   return ceil( ( sqrt( 8*num + 1 ) -1 ) / 2 ) ;
}
int main(){
   int num = 1234 ;
   cout << "The smallest triangular number larger than "<<num<<" is "<<boxnum(num);
   return 0;
}
Salin selepas log masuk

Output

The smallest triangular number larger than 1234 is 50
Salin selepas log masuk
Salin selepas log masuk

Kerumitan masa kaedah ini - O(logn)

Kerumitan Ruang - O(1) kerana kami hanya menggunakan ruang tambahan yang berterusan.

Dalam artikel ini, kami membincangkan dua kaedah berbeza untuk mencari bilangan segitiga terkecil yang hanya lebih besar daripada nombor "num" tertentu. Kaedah pertama hanya mengira nombor trigonometri dengan menjalankan gelung dan menambah n untuk setiap lelaran. Kami juga mengira perbezaan antara nombor yang diberikan dan nombor trigonometri. Dalam pendekatan kedua, kami menjana formula matematik untuk mengira output yang kami kehendaki.

Atas ialah kandungan terperinci Nombor segi tiga terkecil lebih besar daripada p. 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