Computer >> Máy Tính >  >> Lập trình >> C ++

Xây dựng một mảng tần số gồm các chữ số của các giá trị thu được từ x ^ 1, x ^ 2, ....., x ^ n trong C ++

Giả sử chúng ta có hai số nguyên x và n. Chúng ta phải tìm mảng sao cho nó chứa tần suất của các số chỉ số xuất hiện trong (x ^ 1, x ^ 2,… x ^ (n - 1), x ^ n). Vì vậy, nếu x =15 và n =3, thì đầu ra sẽ là [0, 1, 2, 2, 0, 3, 0, 1, 0, 0]. Như chúng ta biết rằng x ^ 1 đến x ^ n, các giá trị là 15, 225 và 3375. Vì vậy, mảng tần số là 0, 1, 2, 2, 0, 3, 0, 1, 0, 0

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • Duy trì mảng đếm tần số để lưu trữ số lượng các chữ số từ 0 đến 9.

  • Duyệt qua từng chữ số của x ^ 1 đến x ^ n. Đối với mỗi chữ số, thêm 1 vào chỉ số tương ứng trong mảng đếm tần số

  • Hiển thị mảng.

Ví dụ

#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 << "The frequency array is: ";
   generateFreqArray(x, n);
}

Đầu ra

The frequency array is: [0 1 2 2 0 3 0 1 0 0]