Buongiorno. Ho provato a risolvere il problema ois_cabala. Tuttavia mi da solo 30/100 con gli ultimi output sbagliati. Ho provato a riscriverlo varie volte è questa mi sembrava la migliore. Qualcuno saprebbe dirmi dov’è l’errore?
#include<iostream>
#include<queue>
#include<string>
#include<assert.h>
using namespace std;
void num_cabala(int N, int M, int C, priority_queue<int> &q)
{
if(N == 0) return;
string c = to_string(C);
q.push(C%M);
if(c[c.size()-1] == '3')
{
num_cabala((N-1), M, C*10+6, q);
num_cabala((N-1), M, C*10+9, q);
}else if(c[c.size()-1] == '6'){
num_cabala((N-1), M, C*10+3, q);
num_cabala((N-1), M, C*10+9, q);
}else{
num_cabala((N-1), M, C*10+3, q);
num_cabala((N-1), M, C*10+6, q);
}
}
int occulta(int N, int M)
{
priority_queue<int> q;
num_cabala(N, M, 3, q);
num_cabala(N, M, 6, q);
num_cabala(N, M, 9, q);
return q.top();
}
int main()
{
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;
}