Как сделать что бы повторяющиеся элементы выводило и считало только один раз?

Альберт37

#include <stdio.h>;
#include <math.h>;
int m,i,j,s,n;
void main()
{
int arr[100];
  printf("\nУкажите размер массива - ");
scanf("%d",&m);
  printf("\nВведите элеменыты массива : ");
  for (i=0;i<m;i++)
  scanf("%d",&arr[i]);
s=0;
  for (i=0;i<m;i++)
{
    for (j=i+1;j<m;j++)
{
if (arr[i]==arr[j])
{
s=s+1;
printf ("\nПовторяющееся число %d",arr[i]);}}
}
printf ("\nВсего повторяющихся чисел %d",s);
}
6 ответов

Альберт37

Если порядок элементов в массиве не важен, можешь просто при совпадении элементов менять местами текущий элемент(который сравнивается со всеми остальными) с последним и уменьшать размер массива на 1.


Альберт37

rangerx, в приведенном Альберт37 коде сравниваются соседние элементы массива. А если пользователь ввел такой массив: {11,2,32,21,2, и т.д.} ? Мне кажется придется сначала отсортировать массив.Альберт37, 1. После #include и #include точка с запятой не ставится. 2. Если задан статический массив в строке 6, зачем нужны строки 7 и 8? Если же размер массива должен быть введен пользователем, придется создавать динамический массив
int *arr,m;
printf("\nУкажите размер массива - ");
scanf("%d",&m);
arr=malloc(m*sizeof(int));
.....
free(arr);


Альберт37

в приведенном Альберт37 коде сравниваются соседние элементы массива
А я ничего и не говорил про код который выложил TC. Я всего лишь предложил алгоритм. )
А если пользователь ввел такой массив: {11,2,32,21,2, и т.д.} ?
Без разницы.
Мне кажется придется сначала отсортировать массив.
Необязательно.


Альберт37

Понял. Просто ТС ( увы, как и я ) может неправильно интерпретировать фразу
при совпадении элементов
, думая о приведенном коде.


Альберт37

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


Альберт37

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
void swap(int* a, int* b)
{
    int t = *a;
    *a = *b;
    *b = t;
}
 
int unique(int arr[], int size)
{
    int m, n;
 
    for(m = 0; m < size-1; ++m)
    {
        for(n = m+1; n < size; ++n)
        {
            if(arr[m] == arr[n])
            {
                swap(&arr[m], &arr[size-1]);
                --m;
                --size;
                break;
            }
        }
    }
 
    return size;
}
 
int main()
{
    int* a;
    int uniqueCount;
    int i;
    int size;
 
    do
    {
        printf("Input array size(1-100): ");
        scanf("%d", &size);
 
    }while(size < 1 || size > 100 );
 
    a = malloc(size * sizeof(int));
    srand( time(NULL) );
 
    puts("Array:");
    for(i = 0; i < size; ++i)
    {
        a[i] = rand()%20;
        printf("%d ", a[i]);
    }
 
    if( (uniqueCount = unique(a, size)) == size) printf("\nAll unique.\n");
    else
    {
        printf("\nUnique:\n");
        for(i = 0; i < uniqueCount; ++i)
            printf("%d ", a[i]);
        printf("\nCount: %d\n", uniqueCount);
    }
 
    free(a);
    return 0;
}