Как напечатать четное число после 4 нечетных чисел с помощью C

#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,