Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Pada satah dua dimensi, bilangan lompatan yang diperlukan untuk mencapai titik (d, 0) dari asal

Pada satah dua dimensi, bilangan lompatan yang diperlukan untuk mencapai titik (d, 0) dari asal

王林
王林ke hadapan
2023-09-05 22:41:061313semak imbas

在二维平面上,从原点到达点(d, 0)所需的跳跃次数

Dalam artikel ini kita akan membincangkan kemungkinan penyelesaian kepada masalah analitikal yang menarik, iaitu, berapa banyak lompatan yang diperlukan untuk mencapai titik (d, 0) dari asal dalam satah 2D di mana panjang lompatan tetap ditentukan. Kami akan menggunakan panjang lompatan tetap dan koordinat sasaran untuk mencari bilangan lompatan minimum yang diperlukan.

Senario input dan output

Andaikan panjang lompatan boleh menjadi a atau b, dan titik sasaran ialah (d,0). Output yang diberikan ialah bilangan lompatan minimum yang diperlukan untuk mencapai matlamat.

Input: a = 7, b = 5, d = 9
Output: 2
Input: a = 7, b = 5, d = 5
Output: 1
Input: a = 7, b = 5, d = 24
Output: 4

Andaikan anda berdiri di tempat asal (0, 0) satah 2D. Koordinat sasaran anda ialah (d, 0). Satu-satunya cara untuk mencapai koordinat sasaran adalah dengan membuat lompatan panjang tetap. Matlamat anda adalah untuk mencari cara yang cekap untuk mencapai matlamat anda dengan bilangan lompatan yang paling sedikit.

Gunakan pernyataan Jika

Kami akan menggunakan pernyataan if untuk mencari bilangan lompatan minimum yang diperlukan untuk mencapai (d, 0).

  • Pertama, kita perlu memastikan bahawa a sentiasa lebih besar daripada b, supaya a mewakili panjang lompatan yang lebih panjang, dan b b> mewakili panjang lompatan yang lebih pendek. Oleh itu, jika b > a, , maka kami menetapkan maksimum a dan b kepada a.

  • Seterusnya, kami menyemak sama ada d lebih besar daripada atau sama dengan a. Jika syarat ini dipenuhi, maka kita boleh mengira bilangan lompatan minimum sebagai (d + a - 1) / a. Di sini, (d + a - 1) bermaksud jumlah jarak panjang lompatan "a" dibahagikan dengan a (iaitu panjang setiap lompatan) memberikan bilangan lompatan.

  • Jika d = 0, lompatan tidak diperlukan.

  • Jika d = b, maka kita boleh terus sampai ke titik dengan melompat b panjang.

  • Jika d > b dan d , maka bilangan lompatan minimum ialah 2. Ini kerana jika kita mengambil segi tiga XYZ supaya X ialah asalan, Z ialah titik sasaran, dan Y ialah titik yang memenuhi XY = YZ = max(a, b). Kemudian, lompatan minimum ialah 2, iaitu dari X ke Y dan Y ke Z.

Contoh

#include <iostream>
using namespace std;

int minJumps(int a, int b, int d) {
   // Check if b > a, then interchange the values of a and b
   if (b > a) {
      int cont = a;
      a = b;
      b = cont;
   }
    
   // When d >= a
   if (d >= a)
      return (d + a - 1) / a;

   // When the target point is 0
   if (d == 0)
      return 0;

   // When d is equal to b.
   if (d == b)
      return 1;
     
   // When distance to be covered is not equal to b.    
   return 2;  
    
}

int main() {
   int a = 3, b = 5, d = 9;
   int result = minJumps(a, b, d);
   cout << "Minimum number of jumps required to reach (d, 0) from (0, 0) is: " << result << endl;
   return 0;
}

Output

Minimum number of jumps required to reach (d, 0) from (0, 0) is: 2

Gunakan operator bahagian dan modulo

Jika nilai a atau b ialah 0, maka kita boleh menggunakan operator pembahagian dan modulo untuk mencari bilangan lompatan minimum. Di sini, kita membahagikan jarak d dengan panjang lompatan (kerana salah satu panjang lompatan ialah 0) untuk mendapatkan bilangan lompatan.

Contoh

#include <iostream>
using namespace std;

int minJumps(int d, int jumpLength) {
   // To find number of complete jumps
   int numJumps = d / jumpLength;
   // If distance is not divisible by jump length
   if (d % jumpLength != 0) {
      numJumps++;  
   }
   return numJumps;
}
int main() {
   int d = 24, jumpLength = 4;
   int result = minJumps(d, jumpLength);
   cout << "Minimum number of jumps required to reach (d, 0) from (0, 0) is: " << result << endl;
   return 0;
}

Output

Minimum number of jumps required to reach (d, 0) from (0, 0) is: 6

NOTA - Kami juga boleh menggunakan operator ternary untuk menulis kod dengan cara yang ringkas.

int minJumps(int d, int jumpLength) {
   int numJumps = (d % jumpLength == 0) ? (d / jumpLength) : (d / jumpLength) + 1;
   return numJumps;
}

Kesimpulan

Kami membincangkan cara mencari bilangan lompatan minimum yang diperlukan untuk mencapai titik sasaran (d, 0) dari asal dalam satah 2D. Kami menggunakan pernyataan if untuk mencari bilangan lompatan bagi nilai bukan sifar a dan b (a dan b b> ialah panjang lompatan). Jika a atau b adalah sifar, maka kita boleh menggunakan operator pembahagian dan modulo. Untuk menulis kod secara ringkas, kita boleh menggunakan operator ternary.

Atas ialah kandungan terperinci Pada satah dua dimensi, bilangan lompatan yang diperlukan untuk mencapai titik (d, 0) dari asal. 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