在C ++中所有相邻元素都这样使得其中一个除以另一个的数组的计数

给定两个分别名为“一个”和“另一个”的整数。目标是找到可能的数组数量,使-

  • 数组中的元素介于1和“另一个”之间。

  • 数组的所有元素都是以arr [i]除以arr [i + 1]或arr [i + 1]除以arr [i + 2] ...等等。

  • 数组的长度为“ 1”。

例如

输入值

one = 3, another = 2
输出结果
所有相邻元素都被一个相邻元素相除的数组的计数为: 8

说明

The arrays will be:
[ 1,1,1 ], [ 1,1,2 ], [ 1,2,1 ], [ 1,2,2 ], [ 2,1,1 ], [ 2,1,2 ], [ 2,2,1 ], [ 2,2,2 ]

输入值

one = 2, another = 3
输出结果
所有相邻元素都被一个相邻元素相除的数组的计数为: 7

说明

The arrays will be:
[ 1,1 ], [ 2,2 ], [ 3,3 ], [ 1,2 ], [ 1,3 ], [ 2,2 ], [ 3,3 ]

以下程序中使用的方法如下-

我们知道每个数组的第一个元素可以是[1,另一个]范围内的任何数字。下一个元素将始终是先前的倍数或先前的因数,因此除数条件成立。因子或倍数也应小于“另一个”。我们将使用动态编程来存储计算。为此,我们使用数组arr [] []。arr [1] [another]将为1,因为它们将是单元素数组。arr [i] [j] = arr [i-1] [j] +先前元素的因子+先前元素的倍数(小于另一个)。

  • 以一个整数和另一个作为输入。

  • 功能 adjacent_elements(int first, int second) 返回数组的计数,在该数组中所有相邻元素都是一个,而另一个被除。

  • 将初始计数设为0,并使用数组arr [size] [size]。

  • 使用memset将所有计数初始化为0。

  • 取两个向量-vec用于存储因子,而vec_2用于存储倍数。

  • 使用两个for循环从i = t到i = second和j = 2 * i到j = second遍历。i递增j。

  • 将i添加到vec [j],将j添加到vec_2 [i]。在j循环之后,还将i添加到vec [i]。

  • 使用for循环设置arr [1] [i]。

  • 再次遍历数组,现在遍历vec和vec_2并向arr [i] [j]添加因子和倍数。

  • 最后,添加所有arr [first] [i]以计数并清除vec [i]和vec_2 [i]。

  • 返回计数作为结果。

示例

#include <bits/stdc++.h>
using namespace std;
#define size 1000
int adjacent_elements(int first, int second){
   int count = 0;
   int arr[size][size];
   memset(arr, 0, sizeof arr);
   vector<int> vec[size], vec_2[size];
   memset(vec, 0, sizeof vec);
   memset(vec_2, 0, sizeof vec_2);
   for (int i = 1; i <= second; i++){
      for (int j = 2*i; j <= second; j += i){
         vec[j].push_back(i);
         vec_2[i].push_back(j);
      }
      vec[i].push_back(i);
   }
   for (int i = 1; i <= second; i++){
      arr[1][i] = 1;
   }
   for (int i = 2; i <= first; i++){
      for (int j = 1; j <= second; j++){
         arr[i][j] = 0;
         for (auto it: vec[j]){
            arr[i][j] += arr[i−1][it];
         }
         for (auto it : vec_2[j]){
            arr[i][j] += arr[i−1][it];
         }
      }
   }
   for (int i = 1; i <= second; i++){
      count = count + arr[first][i];
      vec[i].clear();
      vec_2[i].clear();
   }
   return count;
}
int main(){
   int one = 2, another = 2;
   cout<<"所有相邻元素都被一个相邻元素相除的数组的计数为: "<<adjacent_elements(one, another);
   return 0;
}
输出结果

如果我们运行上面的代码,它将生成以下输出-

所有相邻元素都被一个相邻元素相除的数组的计数为: 4

猜你喜欢