C++ проблема с задачей с массивом.

167
31 мая 2019, 08:30

День добрый. Столкнулась с несколькими проблемами при решение задачи на массивы. Задача звучала так: Даны два массива целых чисел. С помощью функции программа должна выводить наибольшее число массива А, которого нет в массиве В. И вот те самые проблемы. 1. Если ввести полностью одинаковые числа, программа выдаст 0, как знак того, что наибольшего числа нет. Что нужно изменить в коде, чтобы при вводе одинаковых чисел, программа выводила "Наибольшего числа нет". 2. Программа не распознает отрицательные числа. Заранее спасибо за помощь.

#include <iostream>
using namespace std;
void maxnum () {
int ok;
do{
    int n,m;
    cout << "Введите количество элементов массива A(n): " << endl;
    cin >> n;
    cout << "Введите количество элементов массива B(m): " << endl;
    cin >> m;
    int *a = new int [n];
    int *b = new int [m];
    int max = 0;
    cout << "Введите элементы массива A(n): " << endl;
    for (int i = 0; i < n; i++)
    cin >> a[i];
    cout << "Введите элементы массива B(m): " << endl;
    for (int j = 0; j < m; j++)
    cin >> b[j];

    for (int i = 0; i < n; i++){
        if (a[i] > max){
            int temp = max;
            max = a[i];

            for (int j = 0; j < n; j++){
                if (b[j] == a[i]){
                    max = temp;
                    delete a;
                    delete b;
                    }

                }
        }
    }
    cout << "Наибольшее число, которое есть в массиве А, но нет в массиве В: " << max << endl;
    cout << "Еще раз или закончить??" << endl;
    cin >> ok;
}while (ok == 1);
}
int main(){
maxnum();
return 0;
}
Answer 1

Я ошибся. В коде не хватает двух булевских переменных.

int max = 0;
int found = 0;
for (int i = 0; i < n; i++) {
  if (!found || a[i] > max) {
    int foundInB = 0;
    for (int j = 0; j < m; j++) {
      if (b[j] == a[i]) {
        foundInB = 1;
        break;
      }
    }
    if (!foundInB) {
      max = a[i];
      found = 1;
    }
  }
}
if (found) {
  cout << "Наибольшее число, которое есть в массиве А, но нет в массиве В: " << max << endl;
} else {
  count << "Наибольшего числа нет";
}
Answer 2

Немного громоздко, но вроде работает:

#include <iostream>
#include <vector>
#include <algorithm>
int main(int argc, char* argv[])
{
    setlocale(LC_ALL, "Russian");
    // Ввод кол-ва элементов
    int n, m;
    std::cout << "Введите количество элементов массива A(n): " << std::endl;
    std::cin >> n;
    std::cout << "Введите количество элементов массива B(m): " << std::endl;
    std::cin >> m;
    // Выделение памяти массивов
    int *a = new int[n];
    int *b = new int[m];
    // Ввод элементов
    std::cout << "Введите элементы массива A(n): " << std::endl;
    for (int i = 0; i < n; i++)
        std::cin >> a[i];
    std::cout << "Введите элементы массива B(m): " << std::endl;
    for (int j = 0; j < m; j++)
        std::cin >> b[j];
    // Массив чисел среди которых осуществляется поиск
    std::vector<int> numbers;
    // Отобрать числа, которые отсутствуют в массиве b
    for (int i = 0; i < n; i++)
    {
        bool add = true;
        for(int j = 0; j < m; j++)
        {
            if (a[i] == b[j]) add = false;
        }
        if(add) numbers.push_back(a[i]);
    }
    // Найти максимальное среди отобраных
    int max =  *std::max_element(numbers.begin(), numbers.end(), [](int elem1, int elem2) {return elem1 < elem2; });
    std::cout << "Наибольшее число, которое есть в массиве А, но нет в массиве В: " << max << std::endl;
    system("pause");
}
READ ALSO
Вопрос о rvalue-ссылке

Вопрос о rvalue-ссылке

В очередной раз убедился, что мое понимание ссылок C++ оставляет желать

131
Рефакторинг кода используя computeIfAbsent()

Рефакторинг кода используя computeIfAbsent()

У меня есть следующий код:

131
Почему JFrame мигает?

Почему JFrame мигает?

Вот такая вот простенькая программ, окно отслеживает позицию мыши и рисует ее координаты рядом с нейНо заметил интересный эффект мигания...

116