使用 C++ 獲取到達目標頁碼所需的最小翻頁次數。


問題陳述

給定一本 N 頁的書,任務是計算到達給定目標頁碼 K 所需的最小翻頁次數。

  • 我們可以從書的正面(即第 1 頁)或書的反面(即第 N 頁)開始翻頁。

  • 每頁都有兩面,正面和反面,除了第一頁,它只有反面,最後一頁可能只有反面,具體取決於書的頁數。

如果 N = 5 且 K = 4,則我們必須翻轉至少 1 頁 -

  • 如果我們從正面開始翻頁,則需要翻 2 次 (1) -> (2, 3) -> (4,5)

  • 如果我們從背面開始翻頁,(4, 5) 需要翻 1 次,翻頁次數 = 1

因此,最小翻頁次數 = 1。

演算法

使用以下公式計算最終結果 -

1. If K is even, front distance = (K – 0)/2 and back distance = (N – 1 – K)/2
2. If K is odd, front distance = (K – 1)/2 and back distance = (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

更新於: 2019年10月31日

479 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

立即開始
廣告

© . All rights reserved.