Check if all array elements can be converted to pronic numbers by rotating digits
Given an array arr[] of size N, the task is to check if it is possible to convert all of the array elements to a pronic number by rotating the digits of array elements any number of times.
Examples:
Input: {321, 402, 246, 299}
Output: True
Explanation:
arr[0] ? Right rotation once modifies arr[0] to 132 (= 11 × 12).
arr[1] ? Right rotation once modifies arr[0] to 240 (= 15 × 16).
arr[2] ? Right rotation twice modifies arr[2] to 462 (= 21 × 22).
arr[3] ? Right rotation twice modifies arr[3] to 992 (= 31 × 32).
Input: {433, 653, 402, 186}
Output: False
Approach: Follow the steps below to solve the problem:
- Traverse the array and check for each array element, whether it is possible to convert it to a pronic number.
- For each array element, apply all the possible rotations and check after each rotation, whether the generated number is pronic or not.
- If it is not possible to convert any array element to a pronic number, print “False”.
- Otherwise, print “True”.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
bool isPronic( int x)
{
for ( int i = 0; i < ( int )( sqrt (x)) + 1; i++)
{
if (x == i * (i + 1))
{
return true ;
}
}
return false ;
}
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 ;
}
bool check( int arr[], int N)
{
for ( int i = 0; i < N; i++)
{
if (checkRot(arr[i]) == false )
{
return false ;
}
}
return true ;
}
int main()
{
int arr[] = { 321, 402, 246, 299 };
int N = sizeof (arr) / sizeof (arr[0]);
cout << (check(arr, N) ? "True" : "False" );
return 0;
}
|
Java
import java.io.*;
import java.lang.*;
import java.util.*;
class GFG {
static boolean isPronic( int x)
{
for ( int i = 0 ; i < ( int )(Math.sqrt(x)) + 1 ; i++) {
if (x == i * (i + 1 )) {
return true ;
}
}
return false ;
}
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 ;
}
static boolean check( int arr[], int N)
{
for ( int i = 0 ; i < N; i++)
{
if (checkRot(arr[i]) == false )
{
return false ;
}
}
return true ;
}
public static void main(String[] args)
{
int arr[] = { 321 , 402 , 246 , 299 };
int N = arr.length;
System.out.println(
(check(arr, N) ? "True" : "False" ));
}
}
|
Python3
def isPronic(n):
for i in range ( int (n * * ( 1 / 2 )) + 1 ):
if i * (i + 1 ) = = n:
return True
return False
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
def check(arr):
for i in arr:
if not checkRot(i):
return False
return True
arr = [ 321 , 402 , 246 , 299 ]
print (check(arr))
|
C#
using System;
using System.Collections.Generic;
class GFG{
static bool isPronic( int x)
{
int val = ( int )Math.Sqrt(x);
val += 1;
for ( int i = 0; i < val; i++)
{
if (x == i * (i + 1))
{
return true ;
}
}
return false ;
}
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 ;
}
static bool check( int []arr, int N)
{
for ( int i = 0; i < N; i++)
{
if (checkRot(arr[i]) == false )
{
return false ;
}
}
return true ;
}
public static void Main()
{
int []arr = { 321, 402, 246, 299 };
int N = arr.Length;
Console.WriteLine(check(arr, N) ? "True" : "False" );
}
}
|
Javascript
<script>
function isPronic(x)
{
for ( var i = 0; i < parseInt(Math.sqrt(x)) + 1; i++)
{
if (x == i * (i + 1))
{
return true ;
}
}
return false ;
}
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 check(arr, N)
{
for ( var i = 0; i < N; i++)
{
if (checkRot(arr[i]) == false )
{
return false ;
}
}
return true ;
}
var arr = [ 321, 402, 246, 299 ]
var N = arr.length;
document.write(check(arr, N) ? "True" : "False" );
</script>
|
Time Complexity: O(N * K * sqrt(val)), where N is the number of elements in the input array, K is the maximum length of a single element in the input array, and val is the maximum value of any element in the input array.
Auxiliary Space: O(1)
Last Updated :
22 Feb, 2023
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...