#c #arrays #loops #nested-loops
#c #массивы #циклы #вложенные циклы
Вопрос:
Я работаю над проблемой, которая называется crazy pet store. В основном в комнате 35 мисок с рыбой, расположенных по кругу. в каждой чаше был разный тип и количество рыбы в них. они расположены следующим образом:
Bowls 1 – 3: 15 fish
Bowls 4 – 7: 8 fish
Bowl 8: 19 fish
Bowls 9 – 12: 16 fish
Bowls 13 – 22: 14 fish
Bowls 23 – 24: 31 fish
Bowls 25 – 29: 9 fish
Bowls 30 – 33: 26 fish
Bowls 34 – 35: 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
}