समस्या विवरण
हमें अंकों की संख्या n और एक अंक digit दिया गया है। उन n-अंकीय संख्याओं की गिनती करनी है जिनमें वह विशेष अंक नहीं आता।
उदाहरण
इनपुट: n = 2, digit = 2
आउटपुट: 153
व्याख्या: 2-अंकीय संख्याएं (10-99) जिनमें अंक 2 नहीं है।
इनपुट: n = 3, digit = 3
आउटपुट: 2187
समाधान दृष्टिकोण
गणितीय सूत्र: प्रत्येक स्थिति के लिए 9 विकल्प (0-9 छोड़कर दिया गया अंक), लेकिन पहली स्थिति के लिए 8 विकल्प (1-9 छोड़कर दिया गया अंक, और 0 नहीं)।
कुल = 8 × 9^(n-1) (यदि digit ≠ 0) कुल = 9 × 9^(n-1) = 9^n (यदि digit = 0)
ब्रूट फोर्स: सभी n-अंकीय संख्याओं (10^(n-1) से 10^n - 1 तक) को जांचें।
कार्यकारी प्रोग्राम (ब्रूट फोर्स)
#include <bits/stdc++.h>
using namespace std;
int countWithoutDigit(int n, int digit) {
int count = 0;
int minVal = pow(10, n-1);
int maxVal = pow(10, n);
for (int i = minVal; i < maxVal; i++) {
int num = i;
bool hasDigit = false;
while (num > 0) {
if (num % 10 == digit) {
hasDigit = true;
break;
}
num /= 10;
}
if (!hasDigit) count++;
}
return count;
}
int main() {
int n = 2, digit = 2;
cout << "गिनती: " << countWithoutDigit(n, digit);
return 0;
}
आउटपुट
गिनती: 153
अनुकूलित गणितीय समाधान
int countMath(int n, int digit) {
if (digit == 0) return pow(9, n);
return 8 * pow(9, n-1);
}