Другие языки программирования и технологии

Вопрос по C++

Помогите пожалуйста найти алгоритм, или код реализующий следующее:Имеется массив из n элементов(n вводится с клавиатуры), элементы массива задаются случайным образомглавный вопрос найти количество неповторяющихся элементов массива(т.е. кол-во элементов встречающихся по 1 разу)вот мой код, но он считает не количество неповторяющихся элементов,а количество сравниваний include <stdio.h># include <conio.h># include <math.h># include <time.h>#include <stdlib.h>void main(){int a[100],w,i,k,n,l,m;clrscr();randomize();scanf("%i",&n);w=0;for (i=0;i<=n-1;i++){a=random(40);printf("%5i",a); }for (i=0;i<=n-1;i++)for (k=i+1;k<=n-1;k++)if (a!=a[k]) w=w++;printf("\n%i",w);getch();}
Отсортировать массив и убрать повторы.. .
Либо завести множество и набить его элементами массива. (что по-сути - то же самое... )

#include <map>

int *mas;
int n;
..

int num_unique = std::set<int> i_set(mas,mas+n).size();
Сергей Ведерников
Сергей Ведерников
18 724
Лучший ответ
Владимир Латышев как это реализовать, если не секрет?
си не знаю, но алгоритм подскажу
опиши какую-нибудь булиновскую переменную (будет флагом, определящим уникальность элемента массива)
по-умолчанию - состояние =true

if (a!=a[k]) w=w++;
в этой строке не суммируй w, а меняй состояние флага на false (т. е. обнаружено дублирование)

по выходу из цикла по переменной k, если состояние флага сохранилось (=true), только теперь увеличивай w

(если в си булиновского типа нет, то используй целочисленный. только тогда вместо true присваивай 0, а вместо false - 1)
#include <stdio.h>
#include <stdlib.h>

#define MAX_RAND 40
#define USED -1

int main(){
int* array;
int i;
int n;
int j;
int counter = 0;
int c;

scanf( "%d", &n );
array = calloc( n, sizeof(int) );
for( i = 0; i < n; i ++ ){
array = rand( MAX_RAND );
printf( "] ", array );
}

for( i = 0; i < n; i++ ){
if( array[ i ] != USED ){
c = 1;
for( j = i+1; j < n; j++ ){
if( array[j] == array){
array[j] = USED;
c = 0;
}
counter += c;
}
}

printf( "\n%d\n", counter );

free( array );

return 0;
}
Марат Саттаров твой же код сосет, потому что поддерживает лишь случаи с не более, чем 100 элементами в массиве
и да, такие числа ( типа 40, или 100 ) в проге надо выносить куда-нибудь, чтобы удобно было их менять
Владимир Латышев запихал я это всё в Turbo C++ ,он выдаёт кучу ошибок, не хотит запускаться(