Buongiornissimo! E’ da giorni ormai che sto cercando di risolvere cabala, non capendo come posso andare avanti col codice.
Quello che il mio algoritmo fa, per ora, è generare tutti i numeri “utili” in un set, per poi testarli uno a uno, senza ricorsione. Chiedo aiuto.
#include <stdio.h>
#include <assert.h>
#include <set>
#include <cmath>
#include <iostream>
using namespace std;
set<int> p;
int occulta(int N, int M) {
int i = 0;
int a;
int c;
int max = 0;
auto it = p.begin();
do {
a = *it;
cout << a << endl;
c = a % M;
if(max < c){
max = c;
}
it++;
} while(a<=pow(10, N));
return max;
}
bool checkDigit(int c){
while (c != 0) {
int current_digit = c % 10;
c /= 10;
int digit = c % 10;
if (current_digit == digit || current_digit % 3 != 0){
return false;
}
}
return true;
}
void inizia(){
int n = 100000;
while(n!=1){
if(checkDigit(n)){
p.insert(n);
}
n--;
}
/*
int i = 0;
for (auto it = p.begin(); i<10; ++it) {
cout << *it << " ";
i++;
}*/
}
int main() {
inizia();
FILE *fr, *fw;
int T, N, M, i;
fr = fopen("input.txt", "r");
fw = fopen("output.txt", "w");
assert(1 == fscanf(fr, "%d", &T));
for (i=0; i<T; i++) {
assert(2 == fscanf(fr, "%d %d", &N, &M));
fprintf(fw, "%d ", occulta(N, M));
}
fprintf(fw, "\n");
fclose(fr);
fclose(fw);
return 0;
}