📜  使用倒置帕斯卡三角形将给定数组加密为单个数字

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

使用倒置帕斯卡三角形将给定数组加密为单个数字

给定一个长度为N (N > 1) 的数组arr[]包含正整数,任务是使用倒帕斯卡三角形将数组的数字加密为单个数字,如下所示。

  • 从数组的开头找到两个相邻元素的总和。
  • 仅将总和替换为和的单位位置的数字。
  • 用这种方式形成的值替换所有数组元素并继续,直到只剩下两个元素。
  • 最后两个元素连接在一起。

例子:

方法:这个问题可以使用基于以下思想的递归来解决:

请按照以下步骤解决问题:

  • 使用递归函数并执行以下操作:
    • 遍历数字以计算相邻元素的总和并用10取模得到单个最低有效数字为numbers[i]=(numbers[i]+numbers[i+1])%10
    • 从数组中删除最后一个元素,因为每次操作后都会减少一个元素。
    • 继续此过程,直到只剩下2 个元素。

下面是上述方法的实现:

C++14
// C++ code for the above approach:
  
#include 
using namespace std;
  
// Recursive function to find the encryption
string digitEncrypt(vector& numbers)
{
    int N = numbers.size();
    string ans;
  
    // If the value of N is 2
    if (N == 2) {
        if (numbers[0] == 0 && numbers[1] == 0)
            return "00";
        else if (numbers[0] == 0)
            return "0" + to_string(numbers[1]);
        return to_string(numbers[0])
               + to_string(numbers[1]);
    }
  
    for (int i = 0; i < N - 1; i++)
        numbers[i] = (numbers[i]
                      + numbers[i + 1])
                     % 10;
  
    numbers.pop_back();
  
    return digitEncrypt(numbers);
}
  
// Drivers code
int main()
{
    vector numbers = { 4, 5, 6, 7 };
  
    // Function call
    cout << digitEncrypt(numbers);
    return 0;
}


输出
04

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