• Ищем качественного (не новичок) разработчиков Xenforo для этого форума! В идеале, чтобы ты был фулл стек программистом. Если у тебя есть что показать, то свяжись с нами по контактным данным: https://t.me/DREDD

C++ Задание на кодварс

Пользователь
Пользователь
Статус
Оффлайн
Регистрация
12 Дек 2019
Сообщения
316
Реакции
61
You are given an array (which will have a length of at least 3, but could be very large) containing integers. The array is either entirely comprised of odd integers or entirely comprised of even integers except for a single integer N. Write a method that takes the array as an argument and returns this "outlier" N.

Вам дан массив (длина которого должна быть не менее 3, но может быть и очень большой), содержащий целые числа. Массив либо полностью состоит из нечетных целых чисел, либо полностью состоит из четных целых чисел, за исключением единственного целого числа N. Напишите метод, который принимает массив в качестве аргумента и возвращает это "исключение" N.

C++:
Expand Collapse Copy
#include <iostream>
#include <string>
using namespace std;
int FindOutlier(std::vector<int> arr)
{
    int result = 0;
    string arr1 (arr.begin(), arr.end());
    reverse(arr1.begin(), arr1.end());
    int massiveint = stoi(arr1);
    int l = arr1.size();
    int ch = 0;
    int ne = 0;
    int c = 0;
    int n = 0;
    int del = 1;
    int i;
    for (i=0;l;i++)
      {
          if (arr[l-1] % 2 == 0)
            {
                ch+=1;
                c = massiveint % 10;
            }
          else
            {
                ne+=1;
                n = massiveint % 10;
            }
        del *= 10;
        massiveint /= 10;
        l -= 1;
      }
    if (ne > ch)
      {
          result = c;
      }
    else
      {
          result = n;
      }
  return result;
}
У меня вот такая вот хуета из костылей получилась но кодварс ругается на stoi

1665830921290.png


Кому не сложно объясните в чём проблема , а про трэш код просто забудьте я калека
 
логни что в строке, которую в stoi передаешь
 
логни что в строке, которую в stoi передаешь
там всё норм, я силайоне запускаю всё нормально
p.s а нет я долбаеб пхвахпвах
логни что в строке, которую в stoi передаешь
а как тогда этот массив преобразовать в строку?
 
Поставь try catch и посмотри точные данные ошибки.
Либо создай проект, всё туда перенести и уже там дебажить каждую итерацию
Кстати, кинь линк на задание
 
А зачем тебе массив в строку преобразовывать?
 
You are given an array (which will have a length of at least 3, but could be very large) containing integers. The array is either entirely comprised of odd integers or entirely comprised of even integers except for a single integer N. Write a method that takes the array as an argument and returns this "outlier" N.

Вам дан массив (длина которого должна быть не менее 3, но может быть и очень большой), содержащий целые числа. Массив либо полностью состоит из нечетных целых чисел, либо полностью состоит из четных целых чисел, за исключением единственного целого числа N. Напишите метод, который принимает массив в качестве аргумента и возвращает это "исключение" N.

C++:
Expand Collapse Copy
#include <iostream>
#include <string>
using namespace std;
int FindOutlier(std::vector<int> arr)
{
    int result = 0;
    string arr1 (arr.begin(), arr.end());
    reverse(arr1.begin(), arr1.end());
    int massiveint = stoi(arr1);
    int l = arr1.size();
    int ch = 0;
    int ne = 0;
    int c = 0;
    int n = 0;
    int del = 1;
    int i;
    for (i=0;l;i++)
      {
          if (arr[l-1] % 2 == 0)
            {
                ch+=1;
                c = massiveint % 10;
            }
          else
            {
                ne+=1;
                n = massiveint % 10;
            }
        del *= 10;
        massiveint /= 10;
        l -= 1;
      }
    if (ne > ch)
      {
          result = c;
      }
    else
      {
          result = n;
      }
  return result;
}
У меня вот такая вот хуета из костылей получилась но кодварс ругается на stoi

Посмотреть вложение 224672

Кому не сложно объясните в чём проблема , а про трэш код просто забудьте я калека
кинь ссылку на кату
 
C++:
Expand Collapse Copy
int find_outlier(std::vector<int>& arr)
{
    std::vector<int> odd_numbers;
    std::vector<int> even_numbers;
    
    
    for(auto num : arr)
    {
        if(num % 2 == 0)
            even_numbers.push_back(num);
        else
            odd_numbers.push_back(num);
    }
    
    if(odd_numbers.size() > even_numbers.size())
        return even_numbers[0];
    else
        return odd_numbers[0];
}
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
C++:
Expand Collapse Copy
#include <iostream>
#include <string>
using namespace std;
int FindOutlier(std::vector<int> arr)
{
    int result = 0;
    try {
    string arr1 (arr.begin(), arr.end());
    reverse(arr1.begin(), arr1.end());
    int massiveint = stoi(arr1);
    int l = arr1.size();
    int ch = 0;
    int ne = 0;
    int c = 0;
    int n = 0;
    int del = 1;
    int i;
    for (i=0;l;i++)
      {
          if (arr[l-1] % 2 == 0)
            {
                ch+=1;
                c = massiveint % 10;
            }
          else
            {
                ne+=1;
                n = massiveint % 10;
            }
        del *= 10;
        massiveint /= 10;
        l -= 1;
      }
    if (ne > ch)
      {
          result = c;
      }
    else
      {
          result = n;
      }
    } catch(const exception& e) {
        printf("%s", e.what());
    }
  return result;
}
try and find the except
 
Поставь try catch и посмотри точные данные ошибки.
Либо создай проект, всё туда перенести и уже там дебажить каждую итерацию
Кстати, кинь линк на задание
Пожалуйста, авторизуйтесь для просмотра ссылки.
А зачем тебе массив в строку преобразовывать?
Потому что я не умею работать с массивами
Крч мне просто надо массив в строку преобразовать и этот бэдбой заработает:CoolCat:
C++:
Expand Collapse Copy
int find_outlier(std::vector<int>& arr)
{
    std::vector<int> odd_numbers;
    std::vector<int> even_numbers;
   
   
    for(auto num : arr)
    {
        if(num % 2 == 0)
            even_numbers.push_back(num);
        else
            odd_numbers.push_back(num);
    }
   
    if(odd_numbers.size() > even_numbers.size())
        return even_numbers[0];
    else
        return odd_numbers[0];
}
Напиши комментарии пж, я чайник нихуя не понимаю че там написано
 
Последнее редактирование:
Пожалуйста, авторизуйтесь для просмотра ссылки.

Потому что я не умею работать с массивами
Крч мне просто надо массив в строку преобразовать и этот бэдбой заработает:CoolCat:

Напиши комментарии пж, я чайник нихуя не понимаю че там написано

1665837393618.png
у

вот твоя ошибка, с помощью этого метода создания строки у тебя помещаются в нее байты
 
Пожалуйста, авторизуйтесь для просмотра ссылки.

Потому что я не умею работать с массивами
Крч мне просто надо массив в строку преобразовать и этот бэдбой заработает:CoolCat:

Напиши комментарии пж, я чайник нихуя не понимаю че там написано

C++:
Expand Collapse Copy
int find_outlier(std::vector<int>& arr)
{
    // вектор для всех нечетных
    std::vector<int> odd_numbers;
    
    // вектор для всех четных
    std::vector<int> even_numbers;
  
  
    // перебираем все числа в векторе который приняли в аргументах
    for(auto num : arr)
    {
        // если при делении числа на 2 нету остачи засовываем его в вектор чётных
        if(num % 2 == 0)
            even_numbers.push_back(num);
        else // в другом случае засовываем в вектор нечётных
            odd_numbers.push_back(num);
    }
  
    // если нечётных больше чем чётных ( значит чётное всего одно по условию )
    // мы возвращаем первый елемент с вектора с чётными числами
    if(odd_numbers.size() > even_numbers.size())
        return even_numbers[0];
    else // в другом случае возвращаем первый элемент с вектора с нечётными
        return odd_numbers[0];
}
а чё делать то? в инете не могу найти как в строку массив перевести
или мб снова через костыли просто слеши убрать?

Ты не в массив переводишь , твоё "int massiveint" это обычная интовая переменная.

Массив выглядит как "int array[ размер если надо ]" , либо в твоем случае ты юзаешь вектор
 
C++:
Expand Collapse Copy
int find_outlier(std::vector<int>& arr)
{
    // вектор для всех нечетных
    std::vector<int> odd_numbers;
   
    // вектор для всех четных
    std::vector<int> even_numbers;
 
 
    // перебираем все числа в векторе который приняли в аргументах
    for(auto num : arr)
    {
        // если при делении числа на 2 нету остачи засовываем его в вектор чётных
        if(num % 2 == 0)
            even_numbers.push_back(num);
        else // в другом случае засовываем в вектор нечётных
            odd_numbers.push_back(num);
    }
 
    // если нечётных больше чем чётных ( значит чётное всего одно по условию )
    // мы возвращаем первый елемент с вектора с чётными числами
    if(odd_numbers.size() > even_numbers.size())
        return even_numbers[0];
    else // в другом случае возвращаем первый элемент с вектора с нечётными
        return odd_numbers[0];
}


Ты не в массив переводишь , твоё "int massiveint" это обычная интовая переменная.

Массив выглядит как "int array[ размер если надо ]" , либо в твоем случае ты юзаешь вектор
Спасибо большое! Посвящаю эту кату тебе:seemsgood:
 
Шарпист говорит:
int Find(int[] i) => i.SkipWhile(z=>z%2==(i.Count(x=>x%2==0)==1?1:0)).ToList()[0];
 
Спасибо большое! Посвящаю эту кату тебе:seemsgood:

Насчет того как можно превратить массив целых чисел в строку, один из самых легких способов


C++:
Expand Collapse Copy
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int FindOutlier( std::vector<int> arr )
{
    int result = 0;
    string arr1;

    for ( auto& num : arr )
    {
        std::string temp = std::to_string( num );
        arr1 += temp;
    }

    reverse( arr1.begin( ), arr1.end( ) );
    int massiveint = stoi( arr1 );
    int l = arr1.size( );
    int ch = 0;
    int ne = 0;
    int c = 0;
    int n = 0;
    int del = 1;
    int i;
    for ( i = 0; l; i++ )
    {
        if ( arr[ l - 1 ] % 2 == 0 )
        {
            ch += 1;
            c = massiveint % 10;
        }
        else
        {
            ne += 1;
            n = massiveint % 10;
        }
        del *= 10;
        massiveint /= 10;
        l -= 1;
    }
    if ( ne > ch )
    {
        result = c;
    }
    else
    {
        result = n;
    }
    return result;
}
 
Насчет того как можно превратить массив целых чисел в строку, один из самых легких способов


C++:
Expand Collapse Copy
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int FindOutlier( std::vector<int> arr )
{
    int result = 0;
    string arr1;

    for ( auto& num : arr )
    {
        std::string temp = std::to_string( num );
        arr1 += temp;
    }

    reverse( arr1.begin( ), arr1.end( ) );
    int massiveint = stoi( arr1 );
    int l = arr1.size( );
    int ch = 0;
    int ne = 0;
    int c = 0;
    int n = 0;
    int del = 1;
    int i;
    for ( i = 0; l; i++ )
    {
        if ( arr[ l - 1 ] % 2 == 0 )
        {
            ch += 1;
            c = massiveint % 10;
        }
        else
        {
            ne += 1;
            n = massiveint % 10;
        }
        del *= 10;
        massiveint /= 10;
        l -= 1;
    }
    if ( ne > ch )
    {
        result = c;
    }
    else
    {
        result = n;
    }
    return result;
}
Прошлый код кстати не сработал( , а этот в симпл тесте сработал но биг тест не смог
1665838323888.png

p.s я понял в чём дело, он ведь считывает в цикле каждую цифру а в биг тесте большие числа крч всё хуйня буду переделывать
 
Прошлый код кстати не сработал( , а этот в симпл тесте сработал но биг тест не смог
Посмотреть вложение 224681

прошлый код не сработал, потому что название поменяй на FindOutlier

C++:
Expand Collapse Copy
int FindOutlier(std::vector<int>& arr)

{
    // вектор для всех нечетных
    std::vector<int> odd_numbers

    // вектор для всех четных
    std::vector<int> even_numbers;

    // перебираем все числа в векторе который приняли в аргументах
    for(auto num : arr)
    {
        // если при делении числа на 2 нету остачи засовываем его в вектор чётных
        if(num % 2 == 0)
            even_numbers.push_back(num);
        else // в другом случае засовываем в вектор нечётных
            odd_numbers.push_back(num);
    }

    // если нечётных больше чем чётных ( значит чётное всего одно по условию )
    // мы возвращаем первый елемент с вектора с чётными числами
    if(odd_numbers.size() > even_numbers.size())
        return even_numbers[0];
    else // в другом случае возвращаем первый элемент с вектора с нечётными
        return odd_numbers[0];
}

вот так вот
 
прошлый код не сработал, потому что название поменяй на FindOutlier

C++:
Expand Collapse Copy
int FindOutlier(std::vector<int>& arr)

{
    // вектор для всех нечетных
    std::vector<int> odd_numbers

    // вектор для всех четных
    std::vector<int> even_numbers;

    // перебираем все числа в векторе который приняли в аргументах
    for(auto num : arr)
    {
        // если при делении числа на 2 нету остачи засовываем его в вектор чётных
        if(num % 2 == 0)
            even_numbers.push_back(num);
        else // в другом случае засовываем в вектор нечётных
            odd_numbers.push_back(num);
    }

    // если нечётных больше чем чётных ( значит чётное всего одно по условию )
    // мы возвращаем первый елемент с вектора с чётными числами
    if(odd_numbers.size() > even_numbers.size())
        return even_numbers[0];
    else // в другом случае возвращаем первый элемент с вектора с нечётными
        return odd_numbers[0];
}

вот так вот
Спасибо!
 
Назад
Сверху Снизу