สมมติว่าเรามีอักขระ 'A' เพียงตัวเดียวในโปรแกรมแก้ไขข้อความ เราสามารถดำเนินการสองครั้งในจดหมายนี้สำหรับแต่ละขั้นตอน -
- คัดลอกทั้งหมด − เราสามารถคัดลอกอักขระทั้งหมดที่มีอยู่ในแผ่นจดบันทึกได้
- วาง − เราสามารถวางอักขระที่คัดลอกครั้งล่าสุดได้
สมมุติว่าเรามีตัวเลข n เราต้องได้ n 'A' บนแผ่นจดบันทึกโดยทำตามขั้นตอนขั้นต่ำที่อนุญาต เราต้องหาผลลัพธ์ในจำนวนขั้นตอนขั้นต่ำเพื่อให้ได้ n 'A' ดังนั้นหาก n ที่กำหนดคือ 3 คำตอบจะเป็น 3 ดังนั้นในตอนแรกจะมี "A" เพียงตัวเดียว ตอนนี้ให้คัดลอกและวางสิ่งนี้ ดังนั้นจะมี "AA" ในตอนนี้ ตอนนี้เราสามารถวางได้อีกครั้ง ดังนั้นจะมีการใส่ 'A' หนึ่งอัน ดังนั้นเราจะได้ “AAA”
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- ret :=0
- สำหรับ k ในช่วง 2 ถึง n
- ในขณะที่ n mod k ไม่ใช่ 0
- ret :=ret + k และ n :=n / k
- ในขณะที่ n mod k ไม่ใช่ 0
- คืนสินค้า
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
#include <bits/stdc++.h> using namespace std; class Solution { public: int minSteps(int n) { int ret = 0; for(int k = 2; k <= n; k++){ for(; n % k == 0; ret += k, n /= k); } return ret; } }; main(){ Solution ob; cout << (ob.minSteps(10)); }
อินพุต
10
ผลลัพธ์
7