Дан целочисленный массив размера N. Найти количество
различных элементов в данном массиве.
C/C++
Помогите с задачей на Си
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#define RAND(min, max) (rand() % ((max) - (min)) + (min))
int* destroy(int* ptr) {
if (ptr) {
free(ptr);
ptr = NULL;
}
return ptr;
}
int* create(int* ptr, size_t n) {
if (ptr) ptr = destroy(ptr);
ptr = (int*)calloc(n, sizeof(int));
return ptr;
}
size_t length(const char* msg) {
size_t value;
printf(msg);
scanf_s("%u", &value);
while (getchar() != '\n');
return value;
}
void swap(int* pa, int* pb) {
if (pa && pb) {
int tmp = *pa;
*pa = *pb;
*pb = tmp;
}
}
void fill_random(int* ptr, size_t n, int a, int b) {
if (ptr && n) {
size_t i = 0U;
srand((unsigned)time(NULL));
if (a > b) swap(&a, &b);
do ptr[i] = RAND(a, b); while (++i < n);
}
}
void show(int* ptr, size_t n, int w) {
if (ptr && n) {
size_t i = 0U;
do printf("%*i", w, ptr[i]); while (++i < n);
puts("");
}
}
size_t unique_count(int* ptr, size_t n) {
size_t count = 0U;
if (ptr && n) {
size_t i, j;
++count;
for (i = 1; i < n; ++i) {
for (j = 0; j < i; ++j) if (ptr[i] == ptr[j]) break;
if (j == i) ++count;
}
}
return count;
}
void unique(int* unordered_set, size_t size_set, int* vector, size_t size_vector) {
if (unordered_set && size_set && vector && size_vector) {
size_t i = 0, k = 0;
unordered_set[k] = vector[i];
while (++i <= size_vector) {
size_t j = 0;
do if (vector[i] == unordered_set[j]) break; while (++j < i);
if (j == i) unordered_set[++k] = vector[i];
}
}
}
int main(void) {
size_t size_vector = 0U;
int* vector = NULL;
size_t size_set = 0U;
int* unordered_set = NULL;
system("chcp 1251 > nul");
size_vector = length("N: ");
vector = create(vector, size_vector);
fill_random(vector, size_vector, 1, 10);
show(vector, size_vector, 3);
size_set = unique_count(vector, size_vector);
unordered_set = create(unordered_set, size_set);
unique(unordered_set, size_set, vector, size_vector);
show(unordered_set, size_set, 3);
unordered_set = destroy(unordered_set);
vector = destroy(vector);
system("pause > nul");
return 0;
}
#include <stdio.h>
#include <time.h>
#define RAND(min, max) (rand() % ((max) - (min)) + (min))
int* destroy(int* ptr) {
if (ptr) {
free(ptr);
ptr = NULL;
}
return ptr;
}
int* create(int* ptr, size_t n) {
if (ptr) ptr = destroy(ptr);
ptr = (int*)calloc(n, sizeof(int));
return ptr;
}
size_t length(const char* msg) {
size_t value;
printf(msg);
scanf_s("%u", &value);
while (getchar() != '\n');
return value;
}
void swap(int* pa, int* pb) {
if (pa && pb) {
int tmp = *pa;
*pa = *pb;
*pb = tmp;
}
}
void fill_random(int* ptr, size_t n, int a, int b) {
if (ptr && n) {
size_t i = 0U;
srand((unsigned)time(NULL));
if (a > b) swap(&a, &b);
do ptr[i] = RAND(a, b); while (++i < n);
}
}
void show(int* ptr, size_t n, int w) {
if (ptr && n) {
size_t i = 0U;
do printf("%*i", w, ptr[i]); while (++i < n);
puts("");
}
}
size_t unique_count(int* ptr, size_t n) {
size_t count = 0U;
if (ptr && n) {
size_t i, j;
++count;
for (i = 1; i < n; ++i) {
for (j = 0; j < i; ++j) if (ptr[i] == ptr[j]) break;
if (j == i) ++count;
}
}
return count;
}
void unique(int* unordered_set, size_t size_set, int* vector, size_t size_vector) {
if (unordered_set && size_set && vector && size_vector) {
size_t i = 0, k = 0;
unordered_set[k] = vector[i];
while (++i <= size_vector) {
size_t j = 0;
do if (vector[i] == unordered_set[j]) break; while (++j < i);
if (j == i) unordered_set[++k] = vector[i];
}
}
}
int main(void) {
size_t size_vector = 0U;
int* vector = NULL;
size_t size_set = 0U;
int* unordered_set = NULL;
system("chcp 1251 > nul");
size_vector = length("N: ");
vector = create(vector, size_vector);
fill_random(vector, size_vector, 1, 10);
show(vector, size_vector, 3);
size_set = unique_count(vector, size_vector);
unordered_set = create(unordered_set, size_set);
unique(unordered_set, size_set, vector, size_vector);
show(unordered_set, size_set, 3);
unordered_set = destroy(unordered_set);
vector = destroy(vector);
system("pause > nul");
return 0;
}
Бахтовар Каримов
круто!!!!
#include "stdio.h"
#include "stdlib.h"
#include "time.h"
int comp(const void* a1, const void* a2)
{int* i1=(int*)a1; int* i2=(int*)a2; return *i1-*i2;}
int main(){
int n,i,k=1; srand(time(NULL)); printf("N: "); scanf("%d",&n);
int a[n]; for(i=0;i< n;i++)printf("%d ",a[i]=rand()%n);
qsort(a,10,sizeof(int),comp);
for(i=1;i< n;i++)k+=a[i]!=a[i-1]; printf("\nk=%d\n",k);}
#include "stdlib.h"
#include "time.h"
int comp(const void* a1, const void* a2)
{int* i1=(int*)a1; int* i2=(int*)a2; return *i1-*i2;}
int main(){
int n,i,k=1; srand(time(NULL)); printf("N: "); scanf("%d",&n);
int a[n]; for(i=0;i< n;i++)printf("%d ",a[i]=rand()%n);
qsort(a,10,sizeof(int),comp);
for(i=1;i< n;i++)k+=a[i]!=a[i-1]; printf("\nk=%d\n",k);}
Похожие вопросы
- Помогите решить задачу на си!!!
- Помогите решить задачу на СИ!
- Помогите решить задачу на СИ желательно с объяснением
- Помогите с задачей на языке СИ
- Помогите пожалуйста решить задачу на Си
- Помогите решить задачу на структуры в Си.
- Помогите решить задачу, пожалуйста. (Язык Си)
- Помогите решить задачу, пожалуйста. Сам не понимаю. (Язык Си)
- Помогите решить задачу на языке программирования Си, пожалуйста
- Программирование, нужна помощь в решение задачи! На си или си++