Game of the Goose 65 / 100

Buongiorno! Stavo provando a dilettarmi nella risoluzione del “gioco dell’oca”. Il codice funziona, ma alla subtask “no additional limitation” il tutto comincia a sbarellare. Ho girato e rigirato il codice ma non riesco a capire cosa non vada (l’output non e’ corretto). Chiedo aiuto. Grazie infinite in anticipo, questo e’ il mio codice

#include <iostream>
#include <vector>

using namespace std;

int N;
vector<int> J;

int main() {
    cin >> N;
    J.resize(N);
    for (int i=0; i<N; i++)
        cin >> J[i];

    int tiri = 0;
    int passi = 0;

    for(int i=1; i<=6; i++){
        while(passi <= N){
            passi = passi + i;
            passi = passi + J[passi];
            tiri++;
        }
        cout << tiri;
        tiri = 0;
        passi = 0;
    }
    cout << endl;
    return 0;
}

p.s: eventuali critiche / obiezioni sul codice sono accolte volentieri

Sei sicuro di poter sempre accedere a J[passi]?

1 Mi Piace

Ummm, hai ragione! Ho provato a modificare, aggiungendo una condizione e togliendo l’uguale dal while- pero’ rimane assolutamente invariato il risultato :weary:

#include <iostream>
#include <vector>

using namespace std;

int N;
vector<int> J;

int main() {
    cin >> N;
    J.resize(N);
    for (int i=0; i<N; i++)
        cin >> J[i];

    int tiri = 0;
    int passi = 0;

    for (int i=1; i<=6; i++){
        while(passi < N){
            passi = passi + i;
            if(passi < N){
                passi = passi + J[passi];
            }
            tiri++;
        }
        cout << tiri << " ";
        tiri = 0;
        passi = 0;
    }
    cout << endl;
    return 0;
}

piccolo hint: ti ricordo che finendo su una casella che ha valore diverso da 0, percorri anche i valori di quella casella! quindi con un tiro potresti fare più di 2 balzi!
tieni conto di questo e dovresti fare 100/100
:)

2 Mi Piace