在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中,初始化int类型的CurrentMax = 0和Maximum = 0均为int类型,以分别存储到目前为止的当前最大值和最大值。

  • 从i = 0循环直到i <n,然后通过调用该IsAutomorphic()函数检查给定的数字是否是自同构的。

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

  • 使用条件条件n> 0的while循环进行循环,并比较n和sqr的最后一位,以检查数字是否是自同构的。

  • 返回MaxAutomorphic()函数,如果数字不是自守的,则设置CurrentMax = 0

  • 否则,如果发现该数字是自同构的,则将1加到CurrentMax并将更大的数字存储在CurrentMax和Maximum中到Maximum变量中。

示例

#include <bits/stdc++.h>

using namespace std;

//检查数字是否是自守的功能

bool IsAutomorphic(int n){

   //存储n的平方

   int sqr = n * n;

   //比较数字

   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++){

      //检查元素是否为非自同构

      if (IsAutomorphic(arr[i]) == false)

         CurrentMax = 0;

         //如果数字是自守的,则更新CurrentMax和Maximum-

      else{

         CurrentMax++;

         Maximum = max(CurrentMax, Maximum);

      }

   }

   return Maximum;

}

//主要功能

int main(){

   int arr[] = { 33, 25, 1, 76, 4 };

   int size = sizeof(arr) / sizeof(arr[0]);

   cout << MaxAutomorphic(arr, size);

   return 0;

}

输出结果

如果运行上面的代码,我们将获得以下输出-

3

以上是 在C ++中最大化连续自守形数的数量 的全部内容, 来源链接: utcz.com/z/326780.html

回到顶部