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

โปรแกรม C++ นับการดำเนินการขั้นต่ำทำให้ n กลายเป็น 1

สมมติว่าเรามีตัวเลข n เราทำการดำเนินการใดการหนึ่งได้ไม่จำกัดครั้ง:

  • แทนที่ n ด้วย n/2 เมื่อ n หาร 2 ลงตัว
  • แทนที่ n ด้วย 2n/3 เมื่อ n หาร 3 ลงตัว
  • แทนที่ n ด้วย 4n/5 เมื่อ n หาร 5 ลงตัว

เราต้องนับจำนวนการเคลื่อนที่ขั้นต่ำที่ต้องใช้เพื่อทำให้ตัวเลขกลายเป็น 1 หากทำไม่ได้ ให้คืนค่า -1

เช่น ถ้าค่าที่ป้อนเข้าเป็น n = 10 ผลลัพธ์จะได้ 4 เพราะใช้ n/2 ได้ 5 แล้ว 4n/5 ได้ 4 แล้ว n/2 อีกครั้งได้ 2 และ n/2 อีกครั้งได้ 1

ขั้นตอนการแก้ปัญหา

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนดังนี้:

m := 0 ในขณะที่ n ไม่เท่ากับ 1 ทำ:    ถ้า n mod 2 เท่ากับ 0 แล้ว:       n := n / 2       (เพิ่ม m ขึ้น 1)    มิฉะนั้นเมื่อ n mod 3 เท่ากับ 0 แล้ว:       n := n / 3       m := m + 2    มิฉะนั้นเมื่อ n mod 5 เท่ากับ 0 แล้ว:       n := n / 5       m := m + 3    มิฉะนั้น       m := -1       ออกจากลูป คืนค่า m

ตัวอย่างโค้ด

ดูการนำไปใช้จริงด้านล่างเพื่อความเข้าใจที่ดียิ่งขึ้น:

#include <bits/stdc++.h> using namespace std; int solve(int n) {    int m = 0;    while (n != 1) {       if (n % 2 == 0) {          n = n / 2;          m++;       }       else if (n % 3 == 0) {          n = n / 3;          m += 2;       }       else if (n % 5 == 0) {          n = n / 5;          m += 3;       }       else {          m = -1;          break;       }    }    return m; } int main() {    int n = 10;    cout << solve(n) << endl; }

ข้อมูลนำเข้า

10

ข้อมูลส่งออก

4