Есть ли лучший способ, которым я мог бы написать эту программу?

0
#include <iostream>

using namespace std;

int main()

{

   int a;
   int b;
   int c;
   int d;
   int e;
   int f;

   int aa = 0;
   int bb = 0;
   int cc = 0;
   int dd = 0;
   int ee = 0;
   int ff = 0;

   const string odd = "ODD";
   const string even = "EVEN";

   cout << "enter 6 numbers " << endl;
   cin >> a;
   cin >> b;
   cin >> c;
   cin >> d;
   cin >> e;
   cin >> f;

   aa = a % 2;
   bb = b % 2;
   cc = c % 2;
   dd = d % 2;
   ee = e % 2;
   ff = f % 2;

   if(aa == 0){
           cout << even << endl;
   }else{
       cout << odd << endl;
   } 

   if(bb == 0){
           cout << even << endl;
   }else{
       cout << odd << endl;
   }

   if(cc == 0){
           cout << even << endl;
   }else{
       cout << odd << endl;
   }

   if(dd == 0){
           cout << even << endl;
   }else{
       cout << odd << endl;
   }

   if(ee == 0){
           cout << even << endl;
   }else{
       cout << odd << endl;
   }

   if(ff == 0){
           cout << even << endl;
   }else{
       cout << odd << endl;
   }
   return 0;
   }

например, есть ли способ заставить его делать то же самое, но с меньшим количеством кода, что бы я ни включил?

есть ли более простой способ, чем писать 6 операторов if/else - есть ли способ сделать все 6 в одном выражении или в цикле?

как я могу повысить свою эффективность?

  • 2
    это вопрос к codereview.stackexchange.com
  • 0
    Вы можете использовать массивы и циклы. Первые главы вашей вводной книги должны охватывать их подробно.
Показать ещё 4 комментария
Теги:
performance
if-statement
variables
codeblocks

4 ответа

1

Напишите эту функцию:

void outputEvenness(int n)
{
    static const string odd = "ODD";
    static const string even = "EVEN";
    if(n % 2){
        cout << odd<< endl;
    } else {
       cout << even << endl;
    }
}

затем вызовите его с помощью outputEvenness(a); outputEvenness(b); и т.п.

  • 0
    Не лучше ли вернуть логическое значение, а затем реализовать простой if/else ?
  • 0
    @Pravnav: вполне возможно, да. Почему бы не опубликовать как ответ? Цель моего ответа состояла в том, чтобы ввести функцию в ОП. Не стесняйтесь идти дальше.
Показать ещё 1 комментарий
1

Прежде всего, вы должны включить header <string> если вы используете класс std :: string.

Также нет смысла определять эти строки, когда они используются как строковые литералы. Кроме того, вместо разных переменных было бы лучше определить только один массив. Вспомогательные переменные также не нужны.

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

#include <iostream>
#include <initializer_list>

int main()
{
   const size_t N = 6;

   int a = 0;
   int b = 0;
   int c = 0;
   int d = 0;
   int e = 0;
   int f = 0;

   const char *odd  = "ODD";
   const char *even = "EVEN";

   std::cout << "enter " << N << " numbers: ";
   std::cin >> a >> b >> c >> d >> e >> f;

   for ( int x : { a, b, c, d, e, f } )
   {
      if ( x % 2 == 0 )
      {
         std::cout << x << " is " << even << std::endl;
      }
      else
      {
         std::cout << x << " is " << odd << std::endl;
      }
   } 

   return 0;
}

Если вам разрешено использовать массивы, программа может выглядеть так:

#include <iostream>

int main()
{
   const size_t N = 6;
   int a[N] = {};

   const char *odd  = "ODD";
   const char *even = "EVEN";

   std::cout << "enter " << N << " numbers: ";
   for ( int &x : a ) std::cin >> x;

   for ( int x : a )
   {
      if ( x % 2 == 0 )
      {
         std::cout << x << " is " << even << std::endl;
      }
      else
      {
         std::cout << x << " is " << odd << std::endl;
      }
   } 

   return 0;
}

Для этой простой программы нет смысла определять отдельную функцию, которая будет проверять, является ли число четным или нечетным, потому что именно эта программа является такой функцией. :)

0

Используйте массивы и циклы:

int a[6];  // Array of 6 ints
cout << "enter 6 numbers" << endl;
// Input the 6 numbers
for (int i = 0; i < 6; i++)
{
     cin >> a[i];
}
// Output the results
for (int i = 0; i < 6; i++)
{
     cout << a[i] << " is " << (a[i] & 1 ? "ODD" : "EVEN") << endl;
}
  • 0
    Спасибо за ответ. есть ли польза от использования функции над массивом и циклами в этом случае, или все это просто предпочтение?
  • 0
    Ну, во-первых, это меньше кода, но во-вторых, вы можете изменить 6 на int, чтобы иметь переменное количество входов.
0
int value = 0;
string response = "";
cout << "enter 6 numbers " << endl;
for(int i=0; i<6; i++)
{
    cin >> value;
    value % 2 == 0 ? response+="even\n" : response+="odd\n";
}
cout << response;

Ещё вопросы

Сообщество Overcoder
Наверх
Меню