คำชี้แจงปัญหา
ให้หนังสือจำนวน N หน้า ภารกิจคือการคำนวณจำนวนหน้าขั้นต่ำที่จะได้หน้าที่ต้องการ K.
-
เราสามารถเริ่มพลิกหน้าจากด้านหน้าของหนังสือ (เช่น จากหน้า 1) หรือจากด้านหลังของหนังสือ (เช่น หมายเลขหน้า N)
-
แต่ละหน้ามีสองด้าน ด้านหน้าและด้านหลัง ยกเว้นหน้าแรกที่มีเฉพาะด้านหลังและหน้าสุดท้ายซึ่งอาจมีเฉพาะด้านหลังขึ้นอยู่กับจำนวนหน้าของหนังสือ
ถ้า N =5 และ K =4 เราต้องเปิดหน้าขั้นต่ำ 1 หน้า −
-
หากเราเริ่มพลิกหน้าจากด้านหน้า จะต้อง 2 รอบ (1) -> (2, 3) -> (4,5)
-
หากเราเริ่มพลิกหน้าจากด้านหลัง (4, 5) ต้องเปิดหน้า 1 รอบ =1
ดังนั้น จำนวนหน้าขั้นต่ำที่เปลี่ยน =1
อัลกอริทึม
ใช้สูตรด้านล่างเพื่อคำนวณผลลัพธ์สุดท้าย -
<ก่อน>1. ถ้า K เป็นเลขคู่ ระยะทางด้านหน้า =(K – 0)/2 และระยะทางด้านหลัง =(N – 1 – K)/22 ถ้า K เป็นเลขคี่ ระยะหน้า =(K – 1)/2 และระยะถอยหลัง =(N – K)/2ตัวอย่าง
#include#include <อัลกอริทึม>โดยใช้เนมสเปซ std;int getMinPageTurns(int n, int k){ if (n % 2 ==0) { ++n; } return min((k + 1) / 2, (n -k + 1) / 2);}int main(){ int n =5, k =4; cout <<"ต้องเปลี่ยนหน้า =" < ผลลัพธ์
เมื่อคุณคอมไพล์และรันโปรแกรมข้างต้น มันสร้างผลลัพธ์ต่อไปนี้ -
ต้องเปลี่ยนหน้า =1