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

Cプログラムで浮動小数点演算を使用しない有理数の二分探索


この問題では、有理数のソートされた配列が与えられます。そして、浮動小数点演算を使用せずに、この有理数配列の二分探索アルゴリズムを使用して、指定された要素を検索する必要があります。

有理数 はp/qの形式で表される数値です。ここで、pとqは両方とも整数です。たとえば、⅔、⅕。

二分探索 要素を見つけるために配列の中央を見つけることによって機能する検索手法です。

浮動小数点演算が許可されていない、有理数のソートされた配列からの二分探索を使用して要素を見つけるため。分子と分母を比較して、どちらの要素が大きいか、またはどちらが検出される要素であるかを見つけます。

このためのプログラムを作成しましょう

#include <stdio.h>
struct Rational {
   int p;
   int q;
};
int compare(struct Rational a, struct Rational b) {
   if (a.p * b.q == a.q * b.p)
      return 0;
   if (a.p * b.q > a.q * b.p)
      return 1;
   return -1;
}
int binarySearch(struct Rational arr[], int l, int r, struct Rational x) {
   if (r >= l) {
      int mid = l + (r - l)/2;
   if (compare(arr[mid], x) == 0) return mid;
   if (compare(arr[mid], x) > 0)
      return binarySearch(arr, l, mid-1, x);
   return binarySearch(arr, mid+1, r, x);
   }
   return -1;
}
int main() {
   struct Rational arr[] = {{1, 4}, {2, 3}, {3, 2}, {7, 2}};
   struct Rational x = {3, 2};
   int n = sizeof(arr)/sizeof(arr[0]);
   printf("Element found at index %d", binarySearch(arr, 0, n-1, x));
}

出力

Element found at index 2

  1. forループを使用して1からNまでのすべての素数を表示するCプログラム

    問題 1からnまでのすべての素数を表示するCプログラムを作成します。これは、実行時にユーザーが指定した値です。 解決策 1からnまでのすべての素数を表示するCプログラムは、実行時にユーザーが指定した値です- アルゴリズム 以下に示すのは、1からnまでのすべての素数を表示するアルゴリズムであり、実行時にユーザーが指定した値です。 ステップ1 −n値を読み取ります。 ステップ2 −カウントの初期化=0 ステップ3 − for i=2からn    a. for j = 1 to i    b. if i % j = 0    

  2. アームストロング数のためのCプログラム

    アームストロングかどうかに関係なく、ユーザーが入力した数字nを確認する必要があるタスクが与えられます。 アームストロング数は、すべての桁の合計が桁数で累乗される場合、または桁の順序nと言うことができる場合、桁と同じです。 以下は、アームストロング数を見つける方法の簡単な表現です- 数式- wxyz…. = pow(w, n) +pow(x, n) + pow(y, n) + pow(z, n) + ….. アルゴリズム START Step 1-> Declare a function to find the value after power o