Напечатать элементы массива, частота встречаемости которых минимальна - C (СИ)

  1. Нужна помощь с задачей: Задан массив m[n], элементами которого являются "длинные" целые числа. Напечатать все те элементы массива,частота встречаемости которых минимальна. то есть если я правильно понял,то нужно вывести все не повторяющиеся элементы ? я написал такой код, все компилится, но программа не работает,а я не могу понять почемуC1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 #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

Код к задаче: «Напечатать элементы массива, частота встречаемости которых минимальна - C (СИ)»

#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;
}

СДЕЛАЙТЕ РЕПОСТ

7   голосов, оценка 3.714 из 5



Похожие ответы
  1. Нужно воспользоваться вложенными циклами чтобы написать программу, которая выводит на печать фигуру в виде пирамида(как на скрине)http://************/966d955e33913f4aa8302760519aa5fa Фигура разворачивается в зависимости от того, какой символ был введен. Есть внешний цикл(для обработки строк) и три внутренних(1 - для пробелов, 2 - для печати букв в порядке возр., 3 - для печати букв в порядке убыв.) Вообщем не понимаю как символы которые выводятся с помощью 3 внутр. цикла шли в обратном порядке, начиная со второго ряда. А АВА АВСВА ABCDCDA ABCDEDCBAC1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 void four() {     int row, probel, left_char, right_char, col;     char ch;       printf("\nVvedite symbol: ");     scanf("%c", &ch);       for (row = 1; row <= 5; row++)     {         for (probel = 4; probel >= row; probel--)             printf(" ");           for (left_char = ch - 4, col = 1; col <= row; left_char++, col++)             printf("%c", left_char);                                                       for (right_char = ch - 4, col = 1; col <= row - 1; right_char++, col++)             printf("%c", right_char);           printf("\n");       }       return; }

  1. Заполнить одномерный массив случайными числами. Вывести на экран все элементы массива, являющимся двухзначными числами. Буду благодарен)))

  1. Подскажите пожалуйста текст программы, которая печатает последнюю из самых коротких строк текстового файла. Текстовый файл рандомный.Добавлено через 3 часа 6 минут Вот, что получилось. Компилятор ругается на строку с открытием файла по заданному адресу. И еще не проработала момент с выводом именно ПОСЛЕДНЕЙ короткой строки. Подскажите, как это сделатьC1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 #include #include #include     void main( ) { FILE *text; int length=100; char *string; if ((text = fopen("G:\IRIT-RtF\Algoritmisation\ShortStrok","r")) == NULL) { puts ("Error opening file");   exit (-1); } while(!feof(text))// пока не конец файла     {         fgets(string, 100, text);         if(strlen(string)

  1. Подскажите ошибку, которую допустила в программе. Задание такое: Вводится текст, за которым следует точка. В алфавитном порядке напечатать (по разу) все строчные русские буквы, входящие в этот текст. (требуется написать программу на языке СИ)C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 #include #include   int main() { char *user_input = malloc(sizeof(char)); char *output = malloc(sizeof(char)); int i = 0; int d = 0; int flag = 1; while (1) { scanf("%c", &user_input[i]); if (user_input[i] == '.') {user_input[i]='\0';break;} for (int j = 0; j < i; i++) { if (user_input[i] == output[j]) { flag = 0; break; } } if (flag) { output[d] = user_input[i]; d++; output =(char*) realloc(output, (d + 2) * sizeof(char)); } flag = 1; i++; user_input = (char*)realloc(user_input, (i + 1) * sizeof(char)); } printf("input %s",user_input); printf("output %s",output); char x; for (int m = 0; m < d; m++) { for (int j = d - 1; j > m; j--) { if (output[j - 1] > output[j]) { x = output[j - 1]; output[j - 1] = output[j]; output[j] = x; } } } output[d + 1] = '\0'; printf("%s", output); return 0; }

  1. Привет! Можете помочь в Си? Есть начало, но как именно менять может кто-то подсказать? Дана квадратная матрица действительных чисел размером 6х6. Заменить элементы лежащие ниже главной диагонали соответствующими элементами, лежащими выше главной диагонали, умноженными на максимальный элемент всей матрицыC1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 void form_matr (int *a, int n, int m) {     int i,j;     for (i=0;i*max) *max=*(a+i*m+j);         }     }     printf("max= %d ", *max); }  int main()  {      int n=6, m=6, max, a[6][6];      form_matr(&a[0][0], n, m);      f1(&a[0][0], n, m, &max);      getch();      return 0;  }

  1. Возможно ли это сделать на базовом уровне, понятном для понимания школьнику

  1. Дан текстовый файл. Напечатать все его строки, содержащие в качестве фрагмента заданный текст

  1. 2.Дан текстовый файл. Напечатать все строки, длина которых меньше заданного числа. Помогите, пожалуйста

  1. Ввести в память машины массив размером N. Заменить все нулевые элементы на минимальный. Замену произвести через макрофункцию.

  1. Что я делаю неверно? Вроде все должно работать, ан-нет, ругается.C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 #define N 9 #include void main() {     int i = 0, s[N], c = 0, k = 0;     for (i = 0; i < N; i++)     {         scanf_s("%d ", &s[i]);     }     for (i = 0; i < N / 2; i++)     {         c = s[i];         s[i] = s[N - i];         s[N - i] = c;     }     for (i = 0; i < N; i++)         printf("%d ", s[i]);     scanf_s("%d", &k); }