Я хочу проверить, все ли элементы (целые числа) от начала до конца в массиве равны - PullRequest
0 голосов
/ 05 июня 2019

В массиве я должен проверить, все ли элементы одинаковы. Например: a[]={2,2,2,2,2,2,2}

    for(i=0;i<n;++i)
    {
        if(a[0] == a[i])
        {
            f = 1;
            break;
        }
    }
    if(f == 1)
    printf("All elements are same");

Это дает мне правду, когда любые два элемента одинаковы. Но я должен проверить, все ли элементы одинаковы или нет.

Ответы [ 4 ]

3 голосов
/ 05 июня 2019

Просто переверните логику, правда.И вы можете начать итерацию с 1, поскольку вы сравниваете с a[0]:

f = 1;
for (i = 1; i < n; ++i)
  if (a[i] != a[0]) {
    f = 0;
    break;
  }

if (f == 1)
  printf("All elements are the same");
1 голос
/ 05 июня 2019

Вот другой подход, более сходный с вашей идеей, чем другие ответы

f = 0; // start with 0 equals
for(i=0;i<n;++i)
{
    if(a[0] == a[i])
    {
        f += 1; // add 1 when finds pair of equals
        // break; // don't break: look at **ALL** elements
    }
}
if(f == n) /* if total pairs is total elements */
printf("All elements are same");

Примечание: этот подход должен учитывать ALL элементов. Гораздо эффективнее использовать подход, который минимизирует количество сравниваемых элементов.

0 голосов
/ 05 июня 2019

Хорошая идея проверить, все ли элементы списка равны, - найти min и max и составить конкуренцию им.

  • Если они равны - это означает, что весь список (или arry и т. Д.) Равен.

  • Если они не равны - это означает, что не весь список равен.

Удачи!

0 голосов
/ 05 июня 2019
f = 1;
...
if(a[0] != a[i])
{
  f = 0;
  break;
}
...
if(f == 1)
    printf("All elements are same");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...