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

ลดจำนวนเป็น 1 โดยดำเนินการตามที่กำหนดใน C++


กำหนดจำนวนเต็มเป็นอินพุต เป้าหมายคือการหาจำนวนขั้นตอนขั้นต่ำหรือการดำเนินการที่จำเป็นในการลดจำนวนอินพุตเป็น 1 การดำเนินการที่สามารถทำได้จะเป็น:

  • ถ้าจำนวนเป็นเลขคู่ ให้หารด้วย 2

  • หาก Number เป็นเลขคี่ ให้เพิ่มหรือลดทีละ 1

ตัวอย่าง

ป้อนข้อมูล − Number=28

ผลผลิต − ขั้นตอนขั้นต่ำเพื่อลด 28 เป็น 1:6

คำอธิบาย

28 เป็นคู่ - หารด้วย 2 =14

14 เป็นคู่ - หารด้วย 2 =7

7 เป็นเลขคี่ - เพิ่มขึ้น 1 =8

8 เป็นคู่ - หารด้วย 2 =4

4 เป็นคู่ - หารด้วย 2 =2

2 เป็นคู่ - หารด้วย 2 =1

ป้อนข้อมูล − Number=9

ผลผลิต - ขั้นตอนขั้นต่ำเพื่อลด 9 เป็น 1:4

คำอธิบาย

9 เป็นเลขคี่ - ลดลง 1 =8

8 เป็นคู่ - หารด้วย 2 =4

4 เป็นคู่ - หารด้วย 2 =2

2 เป็นคู่ - หารด้วย 2 =1

แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้

ในวิธีนี้ใช้วิธีการแบบเรียกซ้ำเพื่อตรวจสอบการดำเนินการขั้นต่ำที่จำเป็นในการลดจำนวนเป็น 1 ในกรณีที่หารด้วย 2 ง่ายๆ ให้ตรวจสอบแบบเรียกซ้ำสำหรับวิธีขั้นต่ำสำหรับ Number+1 หรือ Number-1 แล้วแต่จำนวนใดจะน้อยกว่า

  • นำตัวเลขเข้าเป็นจำนวนเต็ม

  • ฟังก์ชัน minWays(int num) รับ num เป็นอินพุตและส่งกลับจำนวนการดำเนินการขั้นต่ำที่จำเป็นในการลด num เป็น 1

  • นำตัวแปร tmp1, tmp2 และ min เป็นจำนวนเต็ม

  • ถ้า num เป็น 0 ให้คืนค่า 1

  • หาก num%2==0 จะเป็นคู่ ให้ตั้งค่า num=num/2

  • หาก num เป็นเลขคี่ ให้ตั้งค่า tmp1=minWays(num-1) และ tmp2=minWays(num+1)

  • ตั้งค่าขั้นต่ำเป็นขั้นต่ำของ tmp1 และ tmp2

  • กลับ 1+นาที

  • ในตอนท้ายเราจะได้ผลลัพธ์ที่ต้องการ

  • พิมพ์ผลในหลัก

ตัวอย่าง

#include <iostream>
using namespace std;
int minWays(int num){
   int tmp1,tmp2,min;
   if (num == 1){
      return 0;
   }
   else if (num % 2 == 0){
      tmp1=minWays(num/2);
      return (1 + tmp1);
   }
   else{
      int tmp1=minWays(num - 1);
      int tmp2=minWays(num + 1);
      int min=tmp1<tmp2?tmp1:tmp2;
      return (1 + min);
   }
}
int main(){
   int Number = 21;
   cout <<"Minimum steps to reduce "<<Number<<" to 1: "<<minWays(Number);
   return 0;
}

ผลลัพธ์

หากเรารันโค้ดด้านบน มันจะสร้างผลลัพธ์ต่อไปนี้

Minimum steps to reduce 21 to 1: 6