#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 О, я видел только массивы в вопросе. Хороший улов