使用 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
廣告
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP