Напечатать элементы массива, частота встречаемости которых минимальна - C (СИ)
Формулировка задачи:
Нужна помощь с задачей:
Задан массив m[n], элементами которого являются "длинные" целые числа.
Напечатать все те элементы массива,частота встречаемости которых минимальна.
то есть если я правильно понял,то нужно вывести все не повторяющиеся элементы ?
я написал такой код, все компилится, но программа не работает,а я не могу понять почему
#include <stdio.h> #include <stdlib.h> #include <time.h> void fill(long int* mass,int size,long a,long b) { int i; srand((unsigned int)time(0)); for(i=0;i<size;i++) { mass[i]=(b-a)*((long int)rand())/RAND_MAX+a; } } void displayMinimalOccurence(long int* mass,int size) { int i,j,k; for(i=0;i<size;i++) { k=0; for(j=0;j<size;j++) { if(mass[i]==mass[j]) k++; if(k==1) printf("%l, ",mass[i]); } } } void main() { long int* mass,a,b; int size; printf("Zadaite razmer massiva\n"); scanf("%d",&size); mass=(long int*)malloc(sizeof(long int)*size); printf("Zadaite otrezok zapolnenia[a,b]\n"); scanf("%l %l",&a,&b); fill(mass,size,a,b); displayMinimalOccurence(mass,size); system("pause"); }
Решение задачи: «Напечатать элементы массива, частота встречаемости которых минимальна»
textual
Листинг программы
#include <malloc.h> #include <stdio.h> void PrintOft(long int *Arr, int n) { long int *V; int *F; int i,j,k,min,q; V=(long *) calloc(n,sizeof(long int)); /* уникальные значения */ F=(int *) calloc(n,sizeof(int)); /* частоты повторения */ k=-1; for (i=0; i<n; i++) { q=0; for (j=0; j<=k; j++) if (V[j]==Arr[i]) { q=-1; F[j]++; break; } if (q==0) { k++; V[k]=Arr[i]; F[k]=1; } } /* ищем минимальную частоту */ min=F[0]; for (i=0; i<k; i++) if (F[i] < min) min=F[i]; /* печать элементов с минимальной частотой */ for (i=0; i<k; i++) if (F[i]==min) printf("%d ",V[i]); printf("\n"); free(V); free(F); } int main(int argc, char* argv[]) { long int A[15]={1,1,1,123,45,736,-6,123,736,45,45,45,-6,-6,-6}; PrintOft(A,15); return 0; }
Объяснение кода листинга программы
В этом коде:
- #include
- подключаем стандартную библиотеку для ввода-вывода данных - #include
- подключаем стандартную библиотеку для работы с памятью - *void PrintOft(long int Arr, int n)** - функция для печати уникальных элементов массива с минимальной частотой встречаемости
- *long int V;** - переменная-указатель для хранения уникальных значений
- *int F;** - переменная-указатель для хранения частоты встречаемости уникальных значений
- int i,j,k,min,q; - переменные для управления циклом и поиска минимальной частоты
- *V=(long ) calloc(n,sizeof(long int));** - выделяем память под массив уникальных значений
- *F=(int ) calloc(n,sizeof(int));** - выделяем память под массив частоты встречаемости
- k=-1; - инициализируем переменную для хранения индекса последнего уникального значения
- for (i=0; i<n; i++) - цикл по всем элементам массива
- q=0; - переменная для проверки уникальности текущего элемента
- for (j=0; j<=k; j++) - цикл по уже найденным уникальным значениям
- if (V[j]==Arr[i]) - проверка на уникальность текущего элемента
- { - если текущий элемент уже встречался
- q=-1; - меняем значение переменной q для выхода из цикла
- F[j]++; - увеличиваем частоту встречаемости текущего уникального значения
- break; - выходим из внутреннего цикла
- if (q==0) - если текущий элемент уникален
- { - инициализируем новый уникальный элемент
- k++; - увеличиваем индекс последнего уникального элемента
- V[k]=Arr[i]; - сохраняем текущий элемент как уникальный
- F[k]=1; - устанавливаем частоту встречаемости нового уникального элемента равной 1
- } - закрываем блок if для проверки уникальности текущего элемента
- min=F[0]; - инициализируем переменную для хранения минимальной частоты встречаемости
- for (i=0; i<k; i++) if (F[i] < min) min=F[i]; - ищем минимальную частоту встречаемости
- for (i=0; i<k; i++) if (F[i]==min) printf(
%d
,V[i]); - печатаем элементы с минимальной частотой встречаемости - printf(
\n
); - выводим символ новой строки - free(V); - освобождаем память под массив уникальных значений
- free(F); - освобождаем память под массив частоты встречаемости
- *int main(int argc, char argv[])** - функция главного цикла программы
- long int A[15]={1,1,1,123,45,736,-6,123,736,45,45,45,-6,-6,-6}; - инициализируем массив для тестирования функции
- PrintOft(A,15); - вызываем функцию для печати уникальных элементов массива
- return 0; - завершаем программу
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д