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

จำนวนการพลิกหน้าหนังสือน้อยที่สุดเพื่อไปยังหน้าที่ต้องการด้วย C++

ข้อความโจทย์

กำหนดหนังสือ 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)/2
2. ถ้า K เป็นเลขคี่ ระยะทางจากหน้า = (K - 1)/2 และระยะทางจากหลัง = (N - K)/2

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

#include <iostream>
#include <algorithm>
using namespace 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 << "Required page turns = " << getMinPageTurns(n, k) << endl;
    return 0;
}

ผลลัพธ์

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

Required page turns = 1