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

C++で連続自己同形数の数を最大化する


与えられたタスクは、N個の要素を持つ特定の配列内の連続する自己同形要素の数を最大化することです。

自己同形数は、その平方が数自体と同じ桁で終わる数です。たとえば、5は5 * 5 =25であり、25は5で終わる自己同形数です。

例を使用して、私たちがしなければならないことを理解しましょう-

入力 − arr [] ={5,3,625,6,8,1}

出力 − 2

説明 −上記の配列に存在する自己同形数は5、625、6、および1ですが、最大連続自己同形数は{625,6}であり、出力=2になります。

入力 − arr [] ={33、25、1、76、4}

出力 − 3

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

  • main()関数で、int型の変数「n」を作成し、指定された配列のサイズを格納します。

  • 関数MaxAutomorphicで、CurrentMax=0とMaximum=0の両方をint型に初期化して、現在の最大値とこれまでの最大値をそれぞれ格納します。

  • i =0からi

  • IsAutomophic()関数で、int型の変数sqr =n * nを初期化して、数値nの2乗を格納します

  • 条件n>0のwhileループを使用してループし、nとsqrの最後の桁を比較して、数値が自己同形であるかどうかを確認します。

  • MaxAutomorphic()関数に戻り、数値が自己同形でない場合は、CurrentMax =0

    に設定します。
  • それ以外の場合、数値が自己同形であることがわかった場合は、CurrentMaxに1を加算し、CurrentMaxとMaximumのうち大きい方の数値をMaximum変数に格納します。

#include <bits/stdc++.h>
using namespace std;
//Function to check if number is automorphic
bool IsAutomorphic(int n){
   //Storing the square of n
   int sqr = n * n;
   //Comparing the digits
   while (n > 0){
      /*Return false if any digit of n doesn't
      match with its square's last digits*/
      if (n % 10 != sqr % 10)
         return false;
      n /= 10;
      sqr /= 10;
   }
   return true;
}
int MaxAutomorphic(int arr[], int size){
   int CurrentMax = 0, Maximum = 0;
   for (int i = 0; i < size; i++){
      //Checking if the element is non-automorphic
      if (IsAutomorphic(arr[i]) == false)
         CurrentMax = 0;
         //Updating CurrentMax and Maximum if number is automorphic
      else{
         CurrentMax++;
         Maximum = max(CurrentMax, Maximum);
      }
   }
   return Maximum;
}
//Main function
int main(){
   int arr[] = { 33, 25, 1, 76, 4 };
   int size = sizeof(arr) / sizeof(arr[0]);
   cout << MaxAutomorphic(arr, size);
   return 0;
}

出力

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

3

  1. C++五胞体数

    五胞体数は、パスカルの三角形の5番目の数として表されます。ご存知のように、これは5番目の数字です。つまり、パスカルの三角形に少なくとも5つの数字が必要です。したがって、このシリーズの最初の数字は 1 4 6 4 1から始まります。 パスカルの三角形の4行目。したがって、このチュートリアルでは、たとえば、n番目の五胞体数を見つける必要があります Input : 1 Output : 1 Input : 4 Output : 35 次の図から出力を確認できます- この問題については、可能な限り、これは一種のシリーズであるため、ソリューションでこのシリーズのパターンを見つけようと

  2. C++でのデュードニー番号

    与えられた数の底の数理論で定義された数は、最初の自然数の桁の合計が2番目の数の桁の合計に等しくなるように、別の自然数の完全な3乗に等しい自然数です。 (ウィキペディア)。 番号はヘンリー・デュードニーによって発見されました 。その数式 は- ここでは、整数nが与えられます。私たちの仕事は、与えられた番号nが人物番号であるかどうかを確認することです。 問題を理解するために例を見てみましょう 入力: N =17592 出力: いいえ 説明: 与えられた番号はダドニー番号ではありません。 ソリューションアプローチ- 解決策は、デュードニー番号の基本的な定義にあります。