Ciao, vorrei risolvere questo problema, e vedendo il testo pensavo di implementare il problema con combinazioni o permutazioni, ma chiedendo anche a chat gpt mi dice di poterla risolvere anche con il greedy search, solo che io non so come implementarlo e stessa cosa come funzionano le combinazioni e le permutazioni.
Immagina di avere un numero composto da N cifre tutte uguali a 1. Quanti 1 devi cambiare in 5 perché il numero risulti divisibile per 3?
Mmh, non saprei, forse fino a quando la somma delle cifre non é divisibile per 3?
risolto, questo é il codice, praticamente creo un vettore e carico 1 in base a N e pian piano sommo, poi faccio un for e controllo se la somma é divisibile altrimenti tolgo alla somma 1 in base all’indice e metto 5, poi lo aggiungo alla somma.
uso anche un valore boolean isDivisible, cosí se la somma é divisibile per tre lo imposto a true e mi fermo, e alla fine controllo che se é divisibile, stampo i numeri nel vettore altrimenti stampo -1
#include <bits/stdc++.h>
using namespace std;
void run_case(int n){
vector<int> a(n);
int sum = 0;
bool isDivisible = false;
for(int i=0; i<n; i++){
a[i] = 1;
sum+=a[i];
}
for(int i=0; i<n; i++){
if(sum%3 == 0){
isDivisible = true;
break;
} else {
sum -= a[i];
a[i] = 5;
sum += a[i];
}
}
if(isDivisible){
for(int i=0; i<n; i++){
cout << a[i];
}
} else {
cout << -1 << endl;
}
}
int main() {
int n;
cin >> n;
run_case(n);
}
ah, il vettore puó essere inizializzato cosí togliendo il primo for:
vector a(n, 1) e la somma é n