Как сделать цикл по кругу в c

#c #arrays #loops #nested-loops

#c #массивы #циклы #вложенные циклы

Вопрос:

Я работаю над проблемой, которая называется crazy pet store. В основном в комнате 35 мисок с рыбой, расположенных по кругу. в каждой чаше был разный тип и количество рыбы в них. они расположены следующим образом:

 Bowls 13: 15 fish
Bowls 47: 8 fish
Bowl 8: 19 fish
Bowls 912: 16 fish
Bowls 1322: 14 fish
Bowls 2324: 31 fish
Bowls 2529: 9 fish
Bowls 3033: 26 fish
Bowls 3435: 8 fish
 

Есть тюлень, который съедает в общей сложности 361 рыбу — по одной из каждой 4-й миски, начиная с миски № 4, затем № 8, № 12, № 16 и т.д. Я пытаюсь выяснить, как вычислить количество и тип рыбы, оставшихся после того, как тюлень съест 361 рыбу. По какой-то причине вычисление tiger fish отключено, и я не могу понять, почему.(тюлень не ест тигровую рыбу) Ниже приведена моя программа

 int main()
{
    //variable declaration
    int seal, bowl = 0, goldCount = 0, gupCount = 0, angelCount = 0, tigerCount = 0, totalFish = 0, fishEaten = 0, x = 0, num = 0, currentBowl = 3;

    //array with # of fish in bowls
    int fishNum[35] = { 15, 15, 15, 8, 8, 8, 8, 19, 16, 16, 16, 16,
                        14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 31,
                        31, 9, 9, 9, 9, 9, 26, 26, 26, 26, 8, 8 };  // initialize the number of fish in bowls

    //initialize type of fish in bowls
    string fishType[35] = { "goldfish", "goldfish", "goldfish", "goldfish", "goldfish", "goldfish",
                            "guppies", "guppies", "guppies", "guppies", "guppies", "guppies", "guppies",
                            "angel", "angel", "angel", "angel", "angel", "angel", "angel", "angel", "angel",
                            "goldfish", "goldfish", "goldfish", "goldfish", "goldfish", "goldfish", "goldfish", "goldfish",
                            "tiger", "tiger", "tiger", "tiger", "tiger" };

    //THIS ANSWERS QUESTION A1 which lists the # and type of fish in each bowl
    cout << "The number and type of fish in each bowl is as follows: " << endl;
    for (int bowl = 0; bowl <= 34; bowl  )
    {
        num  ;
        cout << "Bowl " << num << " - " << fishNum[bowl] << " " << fishType[bowl] << endl;
    }
    //go through array and link fishNum to fishType
    for (int x = 0; x <= 35; x  )
    {
        if (fishType[x] == "goldfish")
            goldCount  = fishNum[x];
        else if (fishType[x] == "guppies")
            gupCount  = fishNum[x];
        else if (fishType[x] == "angel")
            angelCount  = fishNum[x];
        else if (fishType[x] == "tiger")
            tigerCount  = fishNum[x];
    }

    //calculates total number of fish
    totalFish = (goldCount   gupCount   angelCount   tigerCount);

    //THIS ANSWERS QUESTION B1
    cout << "nTo begin, there are " << totalFish << " total fish. There are " << goldCount << " gold fish, " 
        << gupCount << " guppies, " << angelCount << " angel fish, and " << tigerCount << " tiger fish." << endl;
    

    //traverese through bowls in the room
    while (fishEaten < 361)
    {
        {//keeps track of type of fish eaten
        if (fishNum[bowl] > 0)
            if (fishType[bowl] == "goldfish")
                goldCount--;
            else if (fishType[bowl] == "guppies")
                gupCount--;
            else if (fishType[bowl] == "angel")
                angelCount--;
            else 
                tigerCount--;
        }
        if (fishNum[bowl] > 0)              //if bowl isnt empty...
        {
            fishNum[bowl]--;                //eat one fish
            fishEaten  ;                    //add one to fish eaten tally
            bowl   4;                       //go to next 4th bowl
        }
        else
        {
            bowl  ;                         //if bowl is empty, go to next bowl
        }
        bowl %= 35;                         //wraps around the 35 bowls
    }

    //answer to B2
    cout << "The number of fish eaten is: " << fishEaten << endl;
    cout << "There are " << totalFish - fishEaten << " fish left over once the seal is done eating." << endl;
    
    //didnt eat any tiger fish
    cout << "nThere are " << goldCount << " gold fish, " << gupCount << " guppies, " << angelCount << " angel fish, and " << tigerCount << " tiger fish." << endl;


    return 0;
}```

Can anyone point out why the tiger fish calculation isnt working?
 

Комментарии:

1. Добро пожаловать в Stack Overflow. 1) Знакомы ли вы с операцией по модулю ( % в C )? 2) Лучше всего задавать только один вопрос за раз. 3) Это помогает точно определить, что вы имеете в виду; «пропустить пустую чашу» может означать, что если чаша № 20 пуста, печать должна перейти к чаше № 21 или к чаше № 24, а «не работает должным образом» может означать довольно много разных вещей. 4) Когда вы пишете код, начинайте с простого и наращивайте. Например, попробуйте заставить тюленя посещать каждую миску в круге, не беспокоя рыбу, и не пытайтесь больше, пока это не сработает идеально.

Ответ №1:

Вы хотите использовать оператор по модулю, чтобы обернуть вокруг. Например:

 int bowl = 0;
while (fishEaten < 361)
{
    fishNum[bowl]--;
    fishEaten  ;

    bowl = (bowl   4) % 35; // this goes 4 bowl further, wrapping around
}
 

Если вы хотите пропустить пустые чаши, просто добавьте для этого логику:

 int bowl = 0;
while (fishEaten < 361)
{
    if (fishNum[bowl] > 0)
    {
        fishNum[bowl]--;
        fishEaten  ;
    }

    // advance even if the bowl was empty
    bowl = (bowl   4) % 35; // this goes 4 bowl further, wrapping around
}