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

C++の配列の積の後続ゼロの数をカウントします


サイズNの正の整数の配列Arr[]が与えられます。目標は、配列のすべての要素の積に存在する後続ゼロの数をカウントすることです。

これを行うには、各数値の因数を数えます。 2と5の積は10であり、1の末尾の0が得られるため、各数値の係数として2と5をカウントします。最終的に、どちらか小さい方のカウントが積の末尾のゼロのカウントになります。 42と65がある場合、積には4つの後続ゼロがあります-2 * 2 * 2 * 2 * 5 * 5 * 5 * 5 * 5 * 5 =250000

例を挙げて理解しましょう。

入力

Arr[] = { 2, 5, 10, 15, 20, 25, 100 }

出力

Number of trailing zeroes : 6

説明

Factors 2 and 5 of each element of Arr[]:
Arr[0] = 2 : 2 twos=1, fives=0
Arr[1] = 5 : 5 twos=1, fives=1
Arr[2] = 10 : 2*5 twos=2, fives=2
Arr[3] = 15 : 3*5 twos=2, fives=3
Arr[4] = 20 : 2*2*5 twos=4, fives=4
Arr[5] = 25 : 5*5 twos=4, fives=6
Arr[6] = 100 : 2*2*5*5 twos=6, fives=8
Count of 2 is less so trailing zeroes will be 6.

入力

Arr[] = { 10,10,10,10,10 }

出力

Number of trailing zeroes : 5

説明

Factors 2 and 5 of each element of Arr[]:
Arr[0] = 10 : 2*5 twos=1, fives=1
Arr[1] = 10 : 2*5 twos=2, fives=2
Arr[2] = 10 : 2*5 twos=3, fives=3
Arr[3] = 10 : 3*5 twos=4, fives=4
Arr[4] = 10 : 2*5 twos=5, fives=5
Count of 2 and 5 is equal so trailing zeroes will be 5.

以下のプログラムで使用されているアプローチは次のとおりです

  • 長さNの正の整数の配列を取ります。

  • 関数trailZeros(int arr []、int n)は、配列とnを入力として受け取り、すべての要素の積の後続ゼロの数を返します。

  • 数値ゼロの場合、初期変数カウントを0とします。

  • 2つの変数2と5を、​​2と5の数を要因として取ります。

  • forループを使用して配列をトラバースします。

  • 各要素について、2または5で割り切れる場合は、2と5を増やし、2または5ずつ減らします。

  • forループの最後に、2と5のいずれか小さい方の値をチェックします。

  • 2つのうち低い方でカウントを初期化します。

  • 結果としてカウントを返します。

#include <bits/stdc++.h<
using namespace std;
int trailZeros(int arr[],int n){
   int count = 0;
   int twos = 0;
   int fives = 0;
   for (int i = 0; i < n; i++){
      while(arr[i]%2==0 || arr[i]%5==0){
         if(arr[i]%2==0){
            arr[i]=arr[i]/2;
            twos++;
         }
         if(arr[i]%5==0){
            arr[i]=arr[i]/5;
            fives++;
         }
      }
   }
   count=twos<fives?twos:fives;
   return count;
}
int main(){
   int Arr[]={ 12, 5 , 15, 8, 100, 40 };
   int Length= sizeof(Arr)/sizeof(Arr[0]);
   cout <<endl<< "Number of trailing zeroes : "<<trailZeros(Arr,Length);
   return 0;
}

出力

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

Number of trailing zeroes : 5

  1. C++で長方形の正方形の数を数える

    =Bとなるように、長さL、幅Bの長方形が与えられます。目標は、サイズLXBの長方形が収容できる正方形の数を見つけることです。 上の図は、サイズ3 X 2の長方形を示しています。2、2X2の正方形、6,1X1の正方形があります。 総正方形=6+ 2=8。 サイズLXBのすべての長方形には、1X1の正方形のL*B数があります。 最大の正方形のサイズはBXBです。 L =B =1の場合、正方形=1。 L =B =2の場合、正方形=1 + 4 =5(2X2の1、1X1の4) L =B =3の場合、正方形=1 + 4 + 9 =14(3X3の​​1、2X2の4、1

  2. C ++の製品配列パズル?

    ここでは、配列に関連する1つの興味深い問題を確認します。 n個の要素を持つ配列があります。 n個の要素の別の配列を作成する必要があります。ただし、2番目の配列のi番目の位置は、i番目の要素を除く最初の配列のすべての要素の積を保持します。そして、1つの制約は、この問題では除算演算子を使用できないことです。 除算、演算を使用できれば、すべての要素の積を取得し、最初の配列のi番目の要素を除算して、2番目の配列のi番目の場所に格納することで、この問題を簡単に解決できます。 ここでは、2つの別々の配列を作成することでこれを解決しています。左右。 left [i]は、array[i]を除くarray[