Compruebe si todos los elementos de la array se pueden convertir en números pronicos girando dígitos

Dada una array arr[] de tamaño N , la tarea es verificar si es posible convertir todos los elementos de la array en un número pronico rotando los dígitos de los elementos de la array cualquier número de veces.

Ejemplos:

Entrada: { 321, 402, 246, 299} 
Salida: Verdadero 
Explicación: 
arr[0] → La rotación a la derecha una vez modifica arr[0] a 132 (= 11 × 12). 
arr[1] → La rotación a la derecha una vez modifica arr[0] a 240 (= 15 × 16). 
arr[2] → La rotación a la derecha dos veces modifica arr[2] a 462 (= 21 × 22). 
arr[3] → La rotación a la derecha dos veces modifica arr[3] a 992 (= 31 × 32).

Entrada: { 433, 653, 402, 186}
Salida: Falso

Enfoque: siga los pasos a continuación para resolver el problema:

  • Recorra la array y verifique para cada elemento de la array, si es posible convertirlo en un número pronico .
  • Para cada elemento de la array, aplique todas las rotaciones posibles y verifique después de cada rotación si el número generado es pronico o no.
  • Si no es posible convertir ningún elemento de la array en un número pronico, imprima «Falso» .
  • De lo contrario, escriba «Verdadero» .

A continuación se muestra la implementación del enfoque anterior:

C++

// C++ program for the above approach
#include <bits/stdc++.h>
using namespace std;
 
// function to check Pronic Number
bool isPronic(int x)
{
    for (int i = 0; i < (int)(sqrt(x)) + 1; i++)
    {
 
        // Checking Pronic Number
        // by multiplying consecutive
        // numbers
        if (x == i * (i + 1))
        {
            return true;
        }
    }
    return false;
}
 
// Function to check if any permutation
// of val is a pronic number or not
bool checkRot(int val)
{
 
    string temp = to_string(val);
    for (int i = 0; i < temp.length(); i++)
    {
        if (isPronic(stoi(temp)) == true)
        {
            return true;
        }
        temp = temp.substr(1, temp.size() - 1) + temp[0];
    }
    return false;
}
 
// Function to check if all array
// elements can be converted to
// a pronic number or not
bool check(int arr[], int N)
{
 
    // Traverse the array
    for (int i = 0; i < N; i++)
    {
 
        // If current element
        // cannot be converted
        // to a pronic number
        if (checkRot(arr[i]) == false)
        {
            return false;
        }
    }
    return true;
}
 
// Driven Program
int main()
{
   
    // Given array
    int arr[] = { 321, 402, 246, 299 };
    int N = sizeof(arr) / sizeof(arr[0]);
 
    // function call
    cout << (check(arr, N) ? "True" : "False");
 
    return 0;
}
 
// This code is contributed by Kingash.

Java

// Java program for the above approach
 
import java.io.*;
import java.lang.*;
import java.util.*;
 
class GFG {
 
  // function to check Pronic Number
  static boolean isPronic(int x)
  {
 
    for (int i = 0; i < (int)(Math.sqrt(x)) + 1; i++) {
 
      // Checking Pronic Number
      // by multiplying consecutive
      // numbers
      if (x == i * (i + 1)) {
        return true;
      }
    }
 
    return false;
  }
 
  // Function to check if any permutation
  // of val is a pronic number or not
  static boolean checkRot(int val)
  {
    String temp = Integer.toString(val);
    for (int i = 0; i < temp.length(); i++)
    {
      if (isPronic(Integer.parseInt(temp)) == true) {
        return true;
      }
 
      temp = temp.substring(1) + temp.charAt(0);
    }
    return false;
  }
 
  // Function to check if all array
  // elements can be converted to
  // a pronic number or not
  static boolean check(int arr[], int N)
  {
 
    // Traverse the array
    for (int i = 0; i < N; i++)
    {
 
      // If current element
      // cannot be converted
      // to a pronic number
      if (checkRot(arr[i]) == false)
      {
        return false;
      }
    }
    return true;
  }
 
  // Driver code
  public static void main(String[] args)
  {
 
    // Given array
    int arr[] = { 321, 402, 246, 299 };
    int N = arr.length;
 
    // Function call
    System.out.println(
      (check(arr, N) ? "True" : "False"));
  }
}
 
// This code is contributed by Kingash.

Python3

# Python implementation of
# the above approach
 
# Function to check if a number
# is a pronic number or not
def isPronic(n):
 
  for i in range(int(n**(1 / 2)) + 1):
    if i * (i + 1) == n:
      return True
 
  return False
 
# Function to check if any permutation
# of n is a pronic number or not
def checkRot(n):
 
  temp = str(n)
 
  for i in range(len(temp)):
 
    if isPronic(int(temp)):
      return True
 
    temp = temp[1:]+temp[0]
 
  return False
 
# Function to check if all array
# elements can be converted to
# a pronic number or not
def check(arr):
 
  # Traverse the array
  for i in arr:
 
    # If current element
    # cannot be converted
    # to a pronic number
    if not checkRot(i):
      return False
  return True
 
# Driver Code
arr = [ 321, 402, 246, 299 ]
print(check(arr))

C#

// C# program for the above approach
using System;
using System.Collections.Generic;
 
class GFG{
 
  // function to check Pronic Number
  static bool isPronic(int x)
  {
    int val  = (int)Math.Sqrt(x);
    val += 1;
    for (int i = 0; i < val; i++)
    {
 
      // Checking Pronic Number
      // by multiplying consecutive
      // numbers
      if (x == i * (i + 1))
      {
        return true;
      }
    }
    return false;
  }
 
  // Function to check if any permutation
  // of val is a pronic number or not
  static bool checkRot(int val)
  {
 
    string temp = val.ToString();
    for (int i = 0; i < temp.Length; i++)
    {
      int a = Int32.Parse(temp);
      if (isPronic(a) == true)
      {
        return true;
      }
      temp = temp.Substring(1, temp.Length - 1) + temp[0];
    }
    return false;
  }
 
  // Function to check if all array
  // elements can be converted to
  // a pronic number or not
  static bool check(int []arr, int N)
  {
 
    // Traverse the array
    for (int i = 0; i < N; i++)
    {
 
      // If current element
      // cannot be converted
      // to a pronic number
      if (checkRot(arr[i]) == false)
      {
        return false;
      }
    }
    return true;
  }
 
  // Driven Program
  public static void Main()
  {
 
    // Given array
    int []arr = { 321, 402, 246, 299 };
    int N = arr.Length;
 
    // function call
    Console.WriteLine(check(arr, N) ? "True" : "False");
  }
}
 
// This code is contributed by ipg2016107.

Javascript

<script>
 
// Javascript program for the above approach
 
// function to check Pronic Number
function isPronic(x)
{
    for (var i = 0; i < parseInt(Math.sqrt(x)) + 1; i++)
    {
 
        // Checking Pronic Number
        // by multiplying consecutive
        // numbers
        if (x == i * (i + 1))
        {
            return true;
        }
    }
    return false;
}
 
// Function to check if any permutation
// of val is a pronic number or not
function checkRot(val)
{
 
    var temp = (val).toString();
    for (var i = 0; i < temp.length; i++)
    {
        if (isPronic(parseInt(temp)) == true)
        {
            return true;
        }
        temp = temp.substring(1) + temp[0];
    }
    return false;
}
 
// Function to check if all array
// elements can be converted to
// a pronic number or not
function check(arr, N)
{
 
    // Traverse the array
    for (var i = 0; i < N; i++)
    {
 
        // If current element
        // cannot be converted
        // to a pronic number
        if (checkRot(arr[i]) == false)
        {
            return false;
        }
    }
    return true;
}
 
// Driven Program
 
// Given array
var arr = [ 321, 402, 246, 299 ]
var N = arr.length;
 
// function call
document.write(check(arr, N) ? "True" : "False");
 
// This code is contributed by noob2000.
</script>
Producción: 

True

 

Complejidad de Tiempo: O(N 3/2 )
Espacio Auxiliar: O(1)

Publicación traducida automáticamente

Artículo escrito por rohitsingh07052 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *