Что еще я могу использовать, кроме массива здесь?

#c #loops #for-loop #sequence

#c #циклы #для цикла #последовательность

Вопрос:

есть ли какой-нибудь способ избавиться от массивов в этой программе? Мне не разрешено делать это с std::array помощью или std::vector .

 #include <iostream>
using namespace std;
int main()
{
    int upper,i,j=0,k=0;
    int arr1[1000],arr2[1000];
    cout<<"Enter the upper bound :";
    cin>>upper;
    for(i=0 ; i<upper ; i  )
    {
        if(i%2 == 0)
        {
            arr1[j] = i;
            j  ;
        }
        else
        {
            arr2[k] = i;
            k  ;
        }
    }
    cout<<"List of even numbers :";
    for(i = 0; i<j ; i  )
    {
        cout<<arr1[i]<<" ";
    }
    cout<<"n";
    cout<<"List of odd numbers :";
    for(i = 0; i<k ; i  )
    {
        cout<<arr2[i]<<" ";
    }
    return 0;
}
  

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

1. std::vector звучит как хороший выбор

2. извините, я забыл упомянуть, но оба вектора и массивы не разрешены

3. Что здесь вообще происходит? В коде нет комментариев и никаких объяснений относительно того, что вы делаете. Вы просто печатаете кучу четных чисел, а затем кучу нечетных? Если это так, то массивы, похоже, не служат никакой полезной цели. Вы могли бы написать два цикла, чтобы сделать то же самое.

4. Подсказка: чтобы пропустить использование чисел i = 2 в ваших циклах.

Ответ №1:

Вместо установки элементов двух массивов просто выводите сначала четные числа в заданном диапазоне, а затем нечетные числа.

Например

 #include <iostream>

int main() 
{
    std::cout << "Enter the upper bound: " ;

    unsigned int n = 0;
    std::cin >> n;
    
    std::cout << "List of even numbers :";
    for ( unsigned int i = 0; i < n; i  = 2 )
    {
        std::cout << i << ' ';
    }
    std::cout << 'n';
    
    std::cout << "List of odd numbers :";
    for ( unsigned int i = 1; i < n; i  = 2 )
    {
        std::cout << i << ' ';
    }
    std::cout << 'n';

    return 0;
}
  

Вывод программы может выглядеть следующим образом

 Enter the upper bound: 10
List of even numbers :0 2 4 6 8 
List of odd numbers :1 3 5 7 9
  

Ответ №2:

Быстрое и грязное решение.

 #include <iostream>

int main() 
{ 
int upper;

std::cout << "Enter the upper bound :";
std::cin >> upper;
std::cout<<"List of even numbers :";
for (int i=0; i<upper;i =2)
   std::cout <<i<<" ";
std::cout <<"n";
std::cout<<"List of odd numbers :";
for (int i=1; i<upper;i =2)
   std::cout <<i<<" ";

return 0; 
  

}

Ответ №3:

Я не буду анализировать остальную часть вашего кода, а сосредоточусь на вопросе:

есть ли какой-нибудь способ избавиться от массивов в этой программе?

Поскольку вы не можете использовать std::vector<int> , вы можете сами динамически выделять память.

 #include <cstddef>
#include <iostream>
#include <memory>

int main()
{
    size_t upper;

    std::cout << "Enter the upper bound :";
    if(not (std::cin >> upper)) return 1; // input failed, exit

    // create unique_ptr<int[]> poiting to an array of "upper" number of elements:
    auto arr1 = std::make_unique<int[]>(upper);
    auto arr2 = std::make_unique<int[]>(upper);

    // ...
  

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

1. Он сказал, что векторы не разрешены.

2. @user10191234 О, я видел только массивы в вопросе. Хороший улов