int countDigit(int n, int d) { if (n > 0) { return (n % 10 == d ? 1 : 0) + countDigit(n / 10, d); } return 0; }
int smallestNumber(int N) { if (N == 1) return 1; memset(count, 0, sizeof(count)); count[2] = countDigit(N, 2); count[3] = countDigit(N, 3); count[5] = countDigit(N, 5); count[7] = countDigit(N, 7); if (!checkValid(N)) return -1; int res = 0; res += count[2]/3; count[2] %= 3; if (count[2] == 2) { res ++; count[2] = 0; } res += count[3]/2; count[3] %= 2; res += (count[3] | count[2]); res += count[5] + count[7]; return res; }
int solve(int l, int r) { if(l == r) return 1; if(f[l][r] != -1) return f[l][r]; f[l][r] = 0x3f3f3f3f; for(int k = l; k < r; k++) // [l, k] [k+1, r] { int tmp = solve(l, k) + solve(k+1, r); if((r-l+1) % (k-l+1) == 0 && check(l, r, k)) tmp = std::min(tmp, countDigit((r-l+1)/(k-l+1)) + solve(l, k) + 2); f[l][r] = std::min(f[l][r], tmp); } //printf("%d %d : %d\n", l, r, f[l][r]); return f[l][r]; }
void printNum(int n){ int digitCount = countDigit(n); int a[digitCount]; //to store individual digit for(int i=digitCount-1; i>=0; i--){ //extract last digit and store in array a[i] = n%10; //remove last digit n /= 10; } //print number for(int i=digitCount-1; i>=0; i--) printf("%i ",a[i]); }
int main(void) { /*Variables*/ int num = 0, N = 0; /*Scan user input*/ scanf("%d %d", &num, &N); /*Negate num if it is negative*/ if(num < 0) num = -num; /*Print output *If num has lesser digit that N, return 0. *Else, find number at Nth position */ printf("%d\n", countDigit(num) < N ? 0 : findNum(num, N)); return 0; }
int main(int argc, char * argv[]) { printf("%d\n", countDigit(1007, 7)); return 0; }