用 C++ 构建从 x^1、x^2、.....、x^n\ 获得的值的数字频率数组

c++server side programmingprogramming

假设我们有两个整数 x 和 n。我们必须找到一个数组,使其包含 (x^1, x^2,… x^(n – 1), x^n) 中出现的索引数字的频率。因此,如果 x = 15 且 n = 3,则输出将为 [0, 1, 2, 2, 0, 3, 0, 1, 0, 0]。我们知道 x^1 到 x^n 的值分别为 15、225 和 3375。因此频率数组为 0、1、2、2、0、3、0、1、0、0

为了解决这个问题,我们将遵循以下步骤 −

  • 维护频率计数数组以存储 0 到 9 的数字计数。

  • 遍历 x^1 到 x^n 的每个数字。对于每个数字,将频率计数数组中相应的索引加 1

  • 显示数组。

示例

#include <iostream>
#include <cmath>
using namespace std;
void digitCount(double val, long arr[]) {
   while ((long)val > 0) {
      long digit = (long)val % 10;
      arr[(int)digit]++;
      val = (long)val / 10;
   }
}
void generateFreqArray(int x, int n) {
   long freq_count[10]={0};
   for (int i = 1; i <= n; i++){
      double val = pow((double)x, (double)i);
      digitCount(val, freq_count);
   }
   cout << "[";
   for (int i = 0; i <= 9; i++){
      cout << freq_count[i] << " ";
   }
   cout << "\b]";
}
int main() {
   int x = 15, n = 3;
   cout << "频率数组为:";
   generateFreqArray(x, n);
}

输出

频率数组为:[0 1 2 2 0 3 0 1 0 0]

相关文章