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<n,并通过调用 IsAutomorphic() 函数检查给定数字是否为自守数。

  • 在 IsAutomophic() 函数中初始化一个 int 类型的变量 sqr= n*n 以存储数字 n 的平方

  • 使用 while 循环并使用条件 n>0 进行循环,并比较 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

更新于: 2020-08-17

242 次查看

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告