使用 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
广告