# Aiuto caramelle

**URL:** <https://forum.olinfo.it/t/aiuto-caramelle/8940>\
**Category:** Aiuto\
**Created:** [26 Giugno 2024, 3:17pm UTC](https://forum.olinfo.it/t/aiuto-caramelle/8940 "2024-06-26T15:17:03Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![elisaDessalvi](https://forum.olinfo.it/letter_avatar_proxy/v4/letter/e/aeb1de/32.png) [@elisaDessalvi](https://forum.olinfo.it/u/elisaDessalvi)\
**Post date:** [26 Giugno 2024, 3:17pm UTC](https://forum.olinfo.it/t/aiuto-caramelle/8940/1 "2024-06-26T15:17:03Z")

</div>

ho scritto questo codice ma come provo a eseguirlo mi da errore dicendo che ci dovrebbe essere un while a riga 44 (return risposta) e non capisco perché

#include   
#include

using namespace std;

int mass(int N, vector V){  
int max=V[0];  
for(int i=0; i\<N; i++){  
if(V[i]\>max){  
max=V[i];  
}  
}

```
return max;

```

}

int solve(){  
int N;  
cin \>\> N;  
vector V(N);  
for(int &x: V){  
cin \>\> x;  
}

```
int risposta = mass(N,V);

// aggiungi codice...
int c=0;
cout << risposta;
for(int i=0; i<N; i++){
    if(risposta%V[i]){
		c++;
    }
}
while(c<N)do{
    c=0;
    risposta+=risposta;
    for(int i=0; i<N; i++){
        if(risposta%V[i]){
            c++;
        }
    }
}
return risposta;

```

}

int main(){  
int T;  
cin \>\> T;  
for (int i = 0; i \< T; i++){  
cout \<\< “Case #” \<\< i+1 \<\< ": " \<\< solve() \<\< endl;  
}  
}

---

<div class="post-metadata">

**Author:** ![fve5](https://forum.olinfo.it/user_avatar/forum.olinfo.it/fve5/32/3229_2.png) [@fve5](https://forum.olinfo.it/u/fve5)\
**Post date:** [26 Giugno 2024, 3:20pm UTC](https://forum.olinfo.it/t/aiuto-caramelle/8940/2 "2024-06-26T15:20:09Z")

</div>

> [@elisaDessalvi](#):
>
> `while(c<N)do{`

In C/C++ esistono:

```cpp
while (condizione) { /* cose */ }

```

e

```cpp
do { /* cose */ } while (condizione);

```

Il compilatore ti sta dicendo che è il `do` che hai aperto non è chiuso da nessun `while ();`

---

<div class="post-metadata">

**Author:** ![elisaDessalvi](https://forum.olinfo.it/letter_avatar_proxy/v4/letter/e/aeb1de/32.png) [@elisaDessalvi](https://forum.olinfo.it/u/elisaDessalvi)\
**Post date:** [26 Giugno 2024, 3:34pm UTC](https://forum.olinfo.it/t/aiuto-caramelle/8940/3 "2024-06-26T15:34:57Z")

</div>

ok grazie

---

<div class="post-metadata">

**Author:** ![elisaDessalvi](https://forum.olinfo.it/letter_avatar_proxy/v4/letter/e/aeb1de/32.png) [@elisaDessalvi](https://forum.olinfo.it/u/elisaDessalvi)\
**Post date:** [26 Giugno 2024, 3:47pm UTC](https://forum.olinfo.it/t/aiuto-caramelle/8940/4 "2024-06-26T15:47:16Z")

</div>

adesso però, dopo aver corretto quell’errore, il codice non funziona lo stesso e si interrompe prima di finire perché ci dura troppo e non so cosa fare, non mi sembra molto pesante

---

<div class="post-metadata">

**Author:** ![TizioGrigio0](https://forum.olinfo.it/user_avatar/forum.olinfo.it/tiziogrigio0/32/1819_2.png) [@TizioGrigio0](https://forum.olinfo.it/u/TizioGrigio0)\
**Post date:** [26 Giugno 2024, 8:50pm UTC](https://forum.olinfo.it/t/aiuto-caramelle/8940/5 "2024-06-26T20:50:41Z")

</div>

Credo che tu entri in un loop infinito in questo punto:

```auto
while(c<N)do{
    c=0;
    risposta+=risposta;
    for(int i=0; i<N; i++){
        if(risposta%V[i]){
            c++;
        }
    }
}

```

Quello che fa è continuare finchè **c** non è maggiore o uguale a **N** , e **c** viene resettato in ogni ripetizione del while, rendendo impossibile uscire dal ciclo a meno che **risposta%V[i]** sia vero per ogni **i**

---

<div class="post-metadata">

**Author:** ![elisaDessalvi](https://forum.olinfo.it/letter_avatar_proxy/v4/letter/e/aeb1de/32.png) [@elisaDessalvi](https://forum.olinfo.it/u/elisaDessalvi)\
**Post date:** [27 Giugno 2024, 3:20pm UTC](https://forum.olinfo.it/t/aiuto-caramelle/8940/6 "2024-06-27T15:20:18Z")

</div>

infatti dovrebbe essere così, perché sto cercando il mcm, che deve essere un numero che diviso per ogni numero della lista dia sempre resto 0. allora in realtà ho cambiato un po’ il codice perché mi sono accorta di una cosa, questa è la versione attuale:

#include   
#include

using namespace std;

int mass(int N, vector V){  
int max=V[0];  
for(int i=0; i\<N; i++){  
if(V[i]\>max){  
max=V[i];  
}  
}

```
return max;

```

}

int solve(){  
int N;  
cin \>\> N;  
vector V(N);  
for(int &x: V){  
cin \>\> x;  
}

```
int risposta = mass(N,V);
int k=risposta;

// aggiungi codice...
int c=0;
for(int i=0; i<N; i++){
    if(risposta%V[i]){
		c++;
    }
}
while(c<N){
    c=0;
    risposta+=k;
    for(int i=0; i<N; i++){
        if(risposta%V[i]){
            c++;
        }
    }
}
return risposta;

```

}

int main(){  
int T;  
cin \>\> T;  
for (int i = 0; i \< T; i++){  
cout \<\< “Case #” \<\< i+1 \<\< ": " \<\< solve() \<\< endl;  
}  
}

praticamente io prendo il maggiore di una serie di numeri e controllo se è divisibile per tutti i numeri della serie; se non è così aggiungo al numero maggiore se stesso e ri faccio lo stesso controllo fino a che non trovo il mcm, solo che appunto non fa e non capisco il motivo. avevo pensato anche io che il problema poteva essere un loop infinito ma non capisco perché dovrebbe essere finito, penso che a un certo punto dovrebbe non essere più vera la condizione del while.

---

<div class="post-metadata">

**Author:** ![TizioGrigio0](https://forum.olinfo.it/user_avatar/forum.olinfo.it/tiziogrigio0/32/1819_2.png) [@TizioGrigio0](https://forum.olinfo.it/u/TizioGrigio0)\
**Post date:** [27 Giugno 2024, 8:16pm UTC](https://forum.olinfo.it/t/aiuto-caramelle/8940/7 "2024-06-27T20:16:41Z")

</div>

> [@elisaDessalvi](#):
>
> ```auto
> while(c<N){
> c=0;
> risposta+=k;
> for(int i=0; i<N; i++){
> if(risposta%V[i]){
> c++;
> }
> }
> }
> 
> ```

**c** viene resettato ogni volta, prima che riesca a superare **N** (`c=0` all’inizio del while) e quindi non può mai superare **N** a meno che “`if(risposta%V[i]) c++`” non sia vero ogni volta, rendendo **c** = **N** (facendolo uscire dal “`while(c<N)`”).  
Ti direi che se sposti `c=0` fuori dal while non è più in un loop infinito.

Se dopo aver spostato **c** fuori dal while hai ancora problemi con i risultati, ti metto degli indizi che potresti utilizzare per risolvere i tuoi problemi.

**Indizio piccolo** : in c++ esiste la funzione `lcm()` (least common multiple).

**Indizio grosso** : Puoi utilizzare questa funzione in un ciclo per trovare il minimo comune multiplo di tutti i valori di un array.

---

<div class="post-metadata">

**Author:** ![elisaDessalvi](https://forum.olinfo.it/letter_avatar_proxy/v4/letter/e/aeb1de/32.png) [@elisaDessalvi](https://forum.olinfo.it/u/elisaDessalvi)\
**Post date:** [29 Giugno 2024, 7:47am UTC](https://forum.olinfo.it/t/aiuto-caramelle/8940/8 "2024-06-29T07:47:23Z")

</div>

grazie. ho fatto come mi hai detto e adesso mi da dei risultati ma sono completamente sbagliati. avevo provato a cercare se esisteva una funzione per il mcm ma non l’ho trovata, ho provato a usare quella che mi hai dato tu ma mi dice che non esiste, devo importare qualche libreria?

---

<div class="post-metadata">

**Author:** ![TizioGrigio0](https://forum.olinfo.it/user_avatar/forum.olinfo.it/tiziogrigio0/32/1819_2.png) [@TizioGrigio0](https://forum.olinfo.it/u/TizioGrigio0)\
**Post date:** [29 Giugno 2024, 12:31pm UTC](https://forum.olinfo.it/t/aiuto-caramelle/8940/9 "2024-06-29T12:31:08Z")

</div>

importa la libreria `<numeric>` per usare la funzione lcm()
