#c
#c
Вопрос:
Я использую этот скрипт для печати нечетного числа от 1 до 30.
#include lt;iostreamgt; using namespace std; int main( ) { int i = 1 ; // whele loop from 1 to 30 while (i lt;= 30) { cout lt;lt; ilt;lt; " , "; i = i 2; } return 0; }
Таким образом, результат Будет 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29
Что я должен сделать, если хочу добавить четное число после 4 нечетных чисел. Результат будет таким 1, 3, 5, 7, 10, 11, 13, 15, 17, 20, 21, 23, 25, 27, 30.
Я надеюсь, что кто-нибудь сможет помочь мне с этой проблемой. Спасибо
Комментарии:
1. Итак, способны ли вы распознать шаблон, который необходимо добавлять после каждой четвертой и пятой итерации цикла?
2. Используйте
for
цикл, сравните четное или нечетное и добавьте счетчик.3. Кстати, C не является языком сценариев .
4.
i = "1212121321"[i];
Ответ №1:
На каждой итерации вы печатаете число, как вы делаете сейчас, однако на каждой 5-й итерации то, что вы делаете, немного отличается. Это условие, которое вам нужно проверять на каждой итерации: если верно, печатайте так, если ложно, печатайте так.
Начните с цикла, как вы это сделали. Поскольку вы используете переменную подсчета, которую вы всегда увеличиваете, for
цикл кажется более естественным, чем a while
.
int main() { for(int i = 1; i lt;= 30; i = 2) { cout lt;lt; i lt;lt; " , "; } return 0; }
Теперь вы добавляете тест состояния. Для этого вы можете ввести другую переменную ( numOddNumbers
), чтобы отслеживать, сколько нечетных чисел вы напечатали.
int main() { int numOddNumbers = 0; for(int i = 1; i lt;= 30; i = 2) { if(numOddNumbers gt; 0 amp;amp; numOddNumbers % 4 == 0) { cout lt;lt; i 1 lt;lt; " , "; numOddNumbers = 0; } else { cout lt;lt; i lt;lt; " , "; numOddNumbers ; } } return 0; }
Для условия, которое мы можем использовать numOddNumbers % 4 == 0
для проверки, это numOddNumbers
число равно 4, но так как мы не хотим, чтобы условие было истинным, когда numOddNumbers == 0
мы также удостоверяемся в этом numOddNumbers gt; 0
.
Обратите внимание , что в отличие от i
, numOddNumbers
переменная увеличивается только тогда, когда условие ложно, так как именно тогда мы печатаем нечетное число.
Этот код будет напечатан
1 , 3 , 5 , 7 , 10 , 11 , 13 , 15 , 17 , 20 , 21 , 23 , 25 , 27 , 30 ,
Примечание: Интересное упражнение для вас состоит в том, чтобы упростить этот код, чтобы использовать только переменную подсчета, без дополнительных numOddNumbers
переменных. Шаблон четко определен, и вы знаете, что разница заключается в каждой 5-й итерации.
Ответ №2:
Я могу предложить решение вашей проблемы.
#include lt;iostreamgt; #include lt;vectorgt; using namespace std; void showContentVector(vectorlt;intgt;amp; input) { for(int i=0; ilt;input.size(); i) { coutlt;lt;input[i]lt;lt;", "; } return; } void oddEvenNumbers(int start, int stop, int quantity, vectorlt;intgt;amp; input) { if(startgt;stop) { return; } if(start%2!=0) { input.push_back(start); quantity; } if(quantity==4) { start =3; input.push_back(start); quantity=0; } oddEvenNumbers(start 1, stop, quantity, input); return; } void solve() { vectorlt;intgt; inputVector; oddEvenNumbers(0, 30, 0, inputVector); coutlt;lt;"inputVector lt;- "; showContentVector(inputVector); return; } int main() { solve(); return 0; }
Вот результат:
inputVector lt;- 1, 3, 5, 7, 10, 11, 13, 15, 17, 20, 21, 23, 25, 27, 30,