使用C ++到所需页面的最小页面翻转数。

问题陈述

给定一本书N页,任务是计算获得给定所需页面K的最小页数。

  • 我们可以从书的正面(即从第1页开始)或书的背面(即,第N页)开始翻页。

  • 除了第一页(只有背面)和最后一页(只有背面)(取决于本书的页数)外,每页都有正面和背面两面。

如果N = 5并且K = 4,那么我们必须至少翻一页-

  • 如果我们从前面开始翻页,则需要2圈(1)->(2,3)->(4,5)

  • 如果我们从背面开始翻页,则需要(4,5)翻页= 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