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

終わりに到達するためのジャンプの最小数のためのCプログラム


その要素から前進できる最大ステップ数を示す非負の整数の配列が与えられます。ポインタは、最初は配列の最初のインデックス[0インデックス]に配置されます。あなたの目標は、最小のステップ数で配列のlastindexに到達することです。配列の最後に到達できない場合は、最大整数を出力します。

素朴なアプローチ initial {primary}コンポーネントから開始し、最初の要素からアクセス可能なすべてのコンポーネントを再帰的に呼び出します。最初から最後まで到達するためのジャンプの最小範囲は、最初からアクセス可能な要素から終了を達成するために必要なジャンプの最小範囲を使用して計算されます。

minJumps(start, end) = Min ( minJumps(k, end) )
for all k accessible from the start

ここでは、動的計画法のトップダウンアプローチを使用します。ハッシュマップを使用してサブ問題の結果を保存します。ソリューションを作成するときは常に、最初にサブ問題がすでに解決されているかどうかを確認し、解決されている場合はそれを使用します。

Input: { 1, 2, 4, 1, 2, 2, 1, 1, 3, 8 }
Output: Minimum number of steps = 6 {1-->2-->4-->1-->3-->8}

説明

最初の要素は1なので、2にしか移動できません。2番目の要素は2なので、最大2つのステップを作成できます(例:4または1)。1に到達したところから4に移動します。

配列の最後に到達するためのジャンプの最小数を見つけるための動的計画法アプローチの複雑さはO(n ^ 2)であり、空間の複雑さはO(n)

です。

#include<stdio.h>
#include<limits.h>
int min_steps (int arr[], int n){
   int steps[n];
   int i, j;
   if (n == 0 || arr[0] == 0)
      return INT_MAX;
   steps[0] = 0;
   for (i = 1; i < n; i++){
      steps[i] = INT_MAX;
      for (j = 0; j < i; j++){
         if (i <= j + arr[j] && steps[j] != INT_MAX){
            steps[i] = (steps[i] < (steps[j] + 1)) ? steps[i] : steps[j] + 1;
            break;
         }
      }
   }
   return steps[n - 1];
}
int main (){
   int arr[100];
   int n;
   printf ("Enter size of the array:");
   scanf ("%d", &n);
   printf ("Enter elements in the array:");
   for (int i = 0; i < n; i++){
      scanf ("%d", &arr[i]);
   }
   printf ("Minimum number of steps : %d", min_steps (arr, n));
   return 0;
}

出力

Enter size of array : 7
Enter elements in the array :2 1 1 5 2 1 1
Minimum number of steps : 3

  1. 三角マッチ棒番号のC/C ++プログラム?

    マッチ棒を使用して作成された三角形は、正三角形を作成するように配置されます。これは、三角形のマッチ棒番号と呼ばれます。三角形のマッチ棒の数は、マッチ棒を三角形にするために必要なマッチ棒の数です。 この問題では、数はマッチ棒のピラミッドXの床であり、私たちのタスクは、x階のマッチ棒のピラミッドを形成するために必要なマッチ棒の最小総数を印刷するプログラムを作成することです。 概念をより明確にする例を見てみましょう。 Input: 7 Output: 84 説明 これは三角数の拡張です。整数Xの場合、必要なマッチ棒はX番目の三角数の3倍、つまり(3 * X *(X + 1))/ 2になります。

  2. チェスの駒がPythonのすべての位置に到達するための最小移動数を見つけるためのプログラム

    チェス盤と、ボード内でL字型に動く特別な騎士の駒Kがあるとします。ピースが(x1、y1)の位置にあり、(x2、y2)に移動する場合、その移動はx2=x1±a;として記述できます。 y2=y1±bまたはx2=x1±b; y2=y1±a;ここで、aとbは整数です。位置(0、0)からチェス盤の位置(n-1、n-1)に到達するために、そのチェスの駒が到達するための最小移動数を見つける必要があります。位置に到達できない場合は-1とマークされ、到達できない場合は移動数が返されます。 n – 1行の出力を出力します。ここで、各行iには、ピースが各jに対して実行する必要のある最小移動数を表すn −1個の整数が