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