C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++を使用して目的のページに到達するための最小ページめくり数。


問題の説明

Nページの本が与えられた場合、タスクは、特定の目的のページKに到達するための最小ページめくり数を計算することです。

  • 本の表側(つまり1ページ目から)または本の裏側(つまりページ番号N)からページめくりを開始できます。

  • 各ページには表と裏の2つの面がありますが、最初のページには裏側のみがあり、最後のページには裏側のみがあり、本のページ数によって異なります。

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

  1. C++を使用して中央値をxに等しくするために追加する要素の最小数。

    問題の説明 サイズnと要素xの配列「arr」が与えられた場合、タスクは、中央値がxに等しくなるように配列に追加される要素の最小数を見つけることです。 長さnの配列の中央値は、要素を降順ではない順序で並べ替えた後、位置番号(n-1)/2を占める要素です。たとえば、以下の配列の中央値は20-です。 arr1 [] ={10、20、30、40} arr [] ={1、2、3}およびx =4の場合、中央値を4に等しくするために、配列に4つの数値、つまり{4、5、5、5}を追加する必要があります アルゴリズム アルゴリズムは非常に単純です。配列の中央値がxと等しくなるまで、配列に1つの数値x

  2. C ++を使用して、数の因数の最小合計を求めます。

    ここでは、与えられた数の因子の最小合計を取得する方法を見ていきます。数が12であると仮定します。これはさまざまな方法で因数分解できます- 12 =12 * 1(12 + 1 =13) 12 =2 * 6(2 + 6 =8) 12 =3 * 4(3 + 4 =7) 12 =2 * 2 * 3(2 + 2 + 3 =7) 最小の合計は7です。数値を取り、最小の因子の合計を見つけようとします。最小の因数分解の合計を取得するには、可能な限り数を因数分解する必要があります。言い換えれば、素因数を足して合計Sを求めようとすると、その合計は最小化されると言えます。 例 #include<