Каков наилучший способ проверить, существуют ли ВСЕ значения в диапазоне в массиве в C? - PullRequest
0 голосов
/ 13 апреля 2020

Как проверить, что массив содержит хотя бы один раз, каждое целое значение от 1 до 3? Например:

#include <stdio.h>

int main()
{
  int array[7] = {2, 3, 4, 6, 5, 1};
  if (/* array contains 1, 2 and 3 */) {
    printf("TRUE\n");
  } else {
    printf("FALSE\n");
  }
}

Спасибо за вашу помощь заранее!

Ответы [ 3 ]

1 голос
/ 13 апреля 2020

Сначала нужно решить, как указать желаемый диапазон. Например, хотите ли вы перечислить каждое значение или просто хотите указать минимальное и максимальное значения?

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

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

Теперь переберите массив, который вы хотите изучить. Сравните каждое значение массива со значениями в вашем массиве структур. Если оно совпадает со значением, увеличьте соответствующий счетчик.

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

0 голосов
/ 13 апреля 2020

что вы думаете об этом? По сути, вы создаете массив со значениями, которые вы хотите найти в своем массиве. Вы создаете функцию для этого и отправляете свой массив и значения, которые вы хотите найти в нем. Также отправьте размер каждого массива, чтобы избежать ошибок. Затем для каждого значения, которое вы пытаетесь найти, итерируйте массив, чтобы найти его. Если вы go выбросили весь массив, не найдя его, верните false, потому что ваше значение не в вашем массиве. Если вы никогда не возвращаете false в вашем for l oop, это означает, что вы всегда находите значение, поэтому вы можете вернуть true. Все ваши значения находятся внутри массива.

bool   areValuesInArray(int *array, int *value, int sizeArray, int sizeValue)
{
    int j;
    for (int i = 0, i < sizeValue; i++)
    {
        j = 0;
        while (j < sizeArray && array[j] != values[i])
             j++;
        if (j == sizeArray)
             return false;
    }
    return true;
}
0 голосов
/ 13 апреля 2020

есть 2 способа, либо используйте функцию map для проверки всех 3 переменных, но проблема в том, что это может занять больше времени при большом количестве данных

, поэтому, вероятно, вы можете использовать метод include.

, поэтому он становится array.includes(1). Это возвращает логическое значение.

...