📌  相关文章
📜  C ++程序检查是否所有数组元素都可以通过旋转数字转换为普罗尼克数

📅  最后修改于: 2022-05-13 01:54:23.868000             🧑  作者: Mango

C ++程序检查是否所有数组元素都可以通过旋转数字转换为普罗尼克数

给定一个大小为N的数组arr[] ,任务是检查是否可以通过将数组元素的数字旋转任意次数来将所有数组元素转换为普罗尼克数。

例子:

解决方法:按照以下步骤解决问题:

  • 遍历数组并检查每个数组元素,是否可以将其转换为普罗尼克数。
  • 对于每个数组元素,应用所有可能的旋转并在每次旋转后检查生成的数字是否为 pronic。
  • 如果无法将任何数组元素转换为普罗尼克数,请打印“False”
  • 否则,打印“True”

下面是上述方法的实现:

C++
// C++ program for the above approach
#include 
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.


输出:
True

时间复杂度: O(N 3/2 )
辅助空间: O(1)

有关详细信息,请参阅有关检查所有数组元素是否可以通过旋转数字转换为普罗尼克数的完整文章!