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

Пользователь
Статус
Оффлайн
Регистрация
12 Дек 2019
Сообщения
316
Реакции[?]
61
Поинты[?]
2K
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++:
#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

Кому не сложно объясните в чём проблема , а про трэш код просто забудьте я калека
 
Пользователь
Статус
Оффлайн
Регистрация
12 Дек 2019
Сообщения
316
Реакции[?]
61
Поинты[?]
2K
логни что в строке, которую в stoi передаешь
там всё норм, я силайоне запускаю всё нормально
p.s а нет я долбаеб пхвахпвах
логни что в строке, которую в stoi передаешь
а как тогда этот массив преобразовать в строку?
 
Пользователь
Статус
Оффлайн
Регистрация
16 Мар 2021
Сообщения
377
Реакции[?]
78
Поинты[?]
11K
Поставь try catch и посмотри точные данные ошибки.
Либо создай проект, всё туда перенести и уже там дебажить каждую итерацию
Кстати, кинь линк на задание
 
Пользователь
Статус
Оффлайн
Регистрация
13 Окт 2021
Сообщения
85
Реакции[?]
44
Поинты[?]
0
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++:
#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

Кому не сложно объясните в чём проблема , а про трэш код просто забудьте я калека
кинь ссылку на кату
 
Участник
Статус
Оффлайн
Регистрация
23 Апр 2022
Сообщения
694
Реакции[?]
326
Поинты[?]
12K
C++:
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];
}
 
Забаненный
Статус
Оффлайн
Регистрация
2 Фев 2021
Сообщения
453
Реакции[?]
82
Поинты[?]
3K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
C++:
#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
 
Пользователь
Статус
Оффлайн
Регистрация
12 Дек 2019
Сообщения
316
Реакции[?]
61
Поинты[?]
2K
Поставь try catch и посмотри точные данные ошибки.
Либо создай проект, всё туда перенести и уже там дебажить каждую итерацию
Кстати, кинь линк на задание
Пожалуйста, авторизуйтесь для просмотра ссылки.
А зачем тебе массив в строку преобразовывать?
Потому что я не умею работать с массивами
Крч мне просто надо массив в строку преобразовать и этот бэдбой заработает:CoolCat:
C++:
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];
}
Напиши комментарии пж, я чайник нихуя не понимаю че там написано
 
Последнее редактирование:
Участник
Статус
Оффлайн
Регистрация
23 Апр 2022
Сообщения
694
Реакции[?]
326
Поинты[?]
12K
Пожалуйста, авторизуйтесь для просмотра ссылки.

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

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

вот твоя ошибка, с помощью этого метода создания строки у тебя помещаются в нее байты
 
Пользователь
Статус
Оффлайн
Регистрация
12 Дек 2019
Сообщения
316
Реакции[?]
61
Поинты[?]
2K
Участник
Статус
Оффлайн
Регистрация
23 Апр 2022
Сообщения
694
Реакции[?]
326
Поинты[?]
12K
Пожалуйста, авторизуйтесь для просмотра ссылки.

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

Напиши комментарии пж, я чайник нихуя не понимаю че там написано
C++:
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[ размер если надо ]" , либо в твоем случае ты юзаешь вектор
 
Пользователь
Статус
Оффлайн
Регистрация
12 Дек 2019
Сообщения
316
Реакции[?]
61
Поинты[?]
2K
C++:
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:
 
Пользователь
Статус
Оффлайн
Регистрация
16 Мар 2021
Сообщения
377
Реакции[?]
78
Поинты[?]
11K
Шарпист говорит:
int Find(int[] i) => i.SkipWhile(z=>z%2==(i.Count(x=>x%2==0)==1?1:0)).ToList()[0];
 
Участник
Статус
Оффлайн
Регистрация
23 Апр 2022
Сообщения
694
Реакции[?]
326
Поинты[?]
12K
Спасибо большое! Посвящаю эту кату тебе:seemsgood:
Насчет того как можно превратить массив целых чисел в строку, один из самых легких способов


C++:
#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;
}
 
Пользователь
Статус
Оффлайн
Регистрация
12 Дек 2019
Сообщения
316
Реакции[?]
61
Поинты[?]
2K
Насчет того как можно превратить массив целых чисел в строку, один из самых легких способов


C++:
#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 я понял в чём дело, он ведь считывает в цикле каждую цифру а в биг тесте большие числа крч всё хуйня буду переделывать
 
Участник
Статус
Оффлайн
Регистрация
23 Апр 2022
Сообщения
694
Реакции[?]
326
Поинты[?]
12K
Прошлый код кстати не сработал( , а этот в симпл тесте сработал но биг тест не смог
Посмотреть вложение 224681
прошлый код не сработал, потому что название поменяй на FindOutlier

C++:
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];
}
вот так вот
 
Пользователь
Статус
Оффлайн
Регистрация
12 Дек 2019
Сообщения
316
Реакции[?]
61
Поинты[?]
2K
прошлый код не сработал, потому что название поменяй на FindOutlier

C++:
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];
}
вот так вот
Спасибо!
 
Сверху Снизу