Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ค้นหาจำนวนขั้นตอนขั้นต่ำในการเข้าถึง M จาก N ใน C++


สมมติว่าเรามีจำนวนเต็ม N และ M สองจำนวน เราต้องหาจำนวนขั้นตอนขั้นต่ำในการไปถึง M จาก N โดยดำเนินการตามที่กำหนด -

  • คูณจำนวน x ด้วย 2 ดังนั้น x จะเป็น 2*x
  • ลบหนึ่งจากจำนวน x ดังนั้นจำนวนจะเป็น x – 1

ถ้า N =4 และ M =6 ผลลัพธ์จะเป็น 2 ดังนั้นหากเราดำเนินการหมายเลข 2 บน N ดังนั้น N จะกลายเป็น 3 จากนั้นดำเนินการหมายเลขหนึ่งกับค่าที่อัพเดตของ N ดังนั้นมันจะกลายเป็น 2 * 3 =6 ดังนั้นจำนวนขั้นตอนขั้นต่ำจะเป็น 2

เพื่อแก้ปัญหานี้ เราจะปฏิบัติตามกฎเหล่านี้ -

  • เราสามารถย้อนกลับปัญหาได้ เหมือนเราใช้หมายเลข N เริ่มจาก M ดังนั้นการดำเนินการใหม่สองรายการจะเป็น

    • หารจำนวนด้วย 2 เมื่อเป็นเลขคู่
    • บวก 1 ด้วยตัวเลข
  • ตอนนี้จำนวนการดำเนินการขั้นต่ำจะเป็น
    • ถ้า N> M ให้คืนค่าส่วนต่างระหว่างกัน ดังนั้นจำนวนขั้นตอนจะเพิ่ม 1 ถึง M จนกว่าจะเท่ากับ N
    • มิฉะนั้น เมื่อ N

ตัวอย่าง

#include<iostream>
using namespace std;
int countMinimumSteps(int n, int m) {
   int count = 0;
   while(m > n) {
      if(m % 2 == 1) {
         m++;
         count++;
      }
      m /= 2;
      count++;
   }
   return count + n - m;
}
int main() {
   int n = 4, m = 6;
   cout << "Minimum number of operations required: " << countMinimumSteps(n, m);
}

ผลลัพธ์

Minimum number of operations required: 2