Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Số Pandigital là gì? Cách tìm số Pandigital bằng C++


Số Pandigital là số nguyên mà trong cơ số cho trước (base), mỗi chữ số từ 0 đến base-1 xuất hiện ít nhất một lần. Ví dụ: 1245678 là pandigital cơ số 10 (chứa 0-9? thực ra thiếu 0,3,9 - ví dụ gốc có lỗi).

Số zeroless pandigital không chứa chữ số 0, chỉ yêu cầu 1..base-1 xuất hiện ít nhất một lần.

Phương pháp

  • Kiểm tra cơ số hợp lệ (2..10).
  • Hàm check_number: đảm bảo mọi chữ số của số đều < base.
  • Hàm is_pandigital: đếm tần suất chữ số, kiểm tra 0..base-1 đều xuất hiện ≥1 lần.
  • Hàm is_zeroless_pandigital: tương tự nhưng bỏ qua 0, kiểm tra 1..base-1.

Ví dụ mã nguồn

#include <iostream>
#include <cstring>
using namespace std;

bool is_pandigital(long long n, int base) {
    int cnt[10] = {0};
    while (n > 0) { cnt[n%10]++; n/=10; }
    for (int i = 0; i < base; i++) if (cnt[i]==0) return false;
    return true;
}

bool is_zeroless_pandigital(long long n, int base) {
    int cnt[10] = {0};
    while (n > 0) {
        int d = n%10;
        if (d==0) return false;
        cnt[d]++;
        n/=10;
    }
    for (int i = 1; i < base; i++) if (cnt[i]==0) return false;
    return true;
}

bool check_number(long long n, int base) {
    while (n > 0) { if (n%10 >= base) return false; n/=10; }
    return true;
}

int main() {
    long long num; int base;
    cout << "Nhap so: "; cin >> num;
    cout << "Nhap co so (2-10): "; cin >> base;
    if (base < 2 || base > 10) return 1;
    if (!check_number(num, base)) {
        cout << num << " khong hop le trong co so " << base;
        return 0;
    }
    if (is_pandigital(num, base)) cout << num << " la pandigital co so " << base;
    else cout << num << " KHONG la pandigital co so " << base;
    cout << endl;
    if (is_zeroless_pandigital(num, base)) cout << num << " la zeroless pandigital co so " << base;
    else cout << num << " KHONG la zeroless pandigital co so " << base;
    return 0;
}

Kết quả mẫu

Nhap so: 45
Nhap co so (2-10): 10
45 KHONG la pandigital co so 10
45 KHONG la zeroless pandigital co so 10