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

Cでの還元型の与えられたN分数の積


N個の分数の分子numと分母denが与えられた場合、タスクは積N個の分数を見つけることであり、出力は誘導型である必要があります。

下の図のように、「4/5」と「3/4」の2つの分数があり、最初の分子に2番目の分子を掛け、最初の分母に掛ける2つの派閥の積が見つかりました。 2番目の分母。これで、最終結果は「12/20」になります。これを減らすことができるため、出力は「3/5」になります。同様に、特定の問題を解決するプログラムを開発する必要があります。

Cでの還元型の与えられたN分数の積

入力

fraction f[3] = {{1,2},
{2,1},
{5,6}}

出力

5/6

説明 − 1/2 * 2/1 * 5/6 =10/12なので、5/6に減らすことができます。

入力

fraction f[2] = {{2, 3},
{1,4}}

出力

1/6

説明 − 2/3 * 1/4 =2/12、これは1/6に減らすことができます

問題を解決するために以下で使用するアプローチは次のとおりです

上記の問題を解決するには、すべての分母と分子を生成し、結果を別の変数prod_denとprod_numに格納します。これらの変数は、それぞれ最終分母と最終分子になります。ここで、誘導型を見つける必要があります。そのため、GCDを見つける必要があります。 (最大公約数)prod_numとprod_denを分割し、prod_numとprod_denをそれぞれのGCDで除算します。

アルゴリズム

Start
Declare a struct fraction with following elements
   1. num, 2. den
In function int GCD(int a, int b)
   Step 1→ If a == 0 then,
      Return b
   Step 2→ Return GCD(b % a, a)
In function int product(int n, fraction f[])
   Step 1→ Initialize prod_num = 1 prod_den = 1
   Step 2→ Loop For i = 0; i < n; i++
      prod_num = prod_num * f[i].num
      prod_den = prod_den * f[i].den
   Step 3→ Declare and initialize gcd = GCD(prod_num, prod_den)
   Step 4→ prod_num = prod_num / gcd
   Step 5→ prod_den = prod_den / gcd
   Step 6→ Print prod_num, prod_den
In Function int main()
   Step 1→ Declare struct fraction f[3] = {
      {1,2},
      {2,1},
      {5,6}}
   Step 2→ Declare and initialization n as sizeof(f)/sizeof(f[0])
   Step 3→ product(n, f)
Stop

#include <stdio.h>
struct fraction{
   int num;
   int den;
};
// Function to return gcd of a and b
int GCD(int a, int b){
   if (a == 0)
      return b;
   return GCD(b % a, a);
}
//fucntion to print the result
int product(int n, fraction f[]){
   int prod_num = 1, prod_den = 1;
   // finding the product of all N
   // numerators and denominators.
   for (int i = 0; i < n; i++) {
      prod_num *= f[i].num;
      prod_den *= f[i].den;
   }
   // Finding GCD of new numerator and
   // denominator
   int gcd = GCD(prod_num, prod_den);
   // finding reduced form
   prod_num /= gcd;
   prod_den /= gcd;
   printf("%d/%d\n", prod_num, prod_den);
   return 0;
}
int main(){
   struct fraction f[3] = {
      {1,2},
      {2,1},
      {5,6}};
   int n = sizeof(f)/sizeof(f[0]);
   product(n, f);
   return 0;
}

出力

上記のコードを実行すると、次の出力が生成されます-

5/6

  1. 最初の配列の最大値とCの2番目の最小値の積

    それぞれサイズn1とn2の2つの配列arr1[]とarr2[]が与えられた場合、最初の配列arr1[]の最大要素と2番目の配列の最小要素の積を見つける必要があります。配列arr2[]。 arr1 [] ={5、1、6、8、9}とarr2 [] ={2、9、8、5、3}に要素があるように、arr1の最大要素は9で、最小要素はarr2は2であるため、両方の積は9 * 2 =18です。同様に、与えられた問題を解決するためのプログラムを作成する必要があります。 入力 arr1[] = {6, 2, 5, 4, 1} arr2[] = {3, 7, 5, 9, 6} 出力 18 説明 MA

  2. 配列の積のCプログラム

    n個の要素の配列arr[n]が与えられた場合、タスクはその配列のすべての要素の積を見つけることです。 7つの要素の配列arr[7]があるように、その製品は次のようになります 例 Input: arr[] = { 10, 20, 3, 4, 8 } Output: 19200 Explanation: 10 x 20 x 3 x 4 x 8 = 19200 Input: arr[] = { 1, 2, 3, 4, 3, 2, 1 } Output: 144 以下で使用されるアプローチは次のとおりです − 配列入力を取得します。 そのサイズを見つけます。 配列を反復処理し、その配列の