#c #qsort
Вопрос:
#include <stdio.h>
#define ll long long
#include <stdlib.h>
ll int comp(const void* a, const void *b)
{
return *(long long *)b - *(long long *)a;
}
int main(int argc, const char * argv[])
{
ll int n;
scanf("%lld", amp;n);
ll int a[n];
for(int i=0; i<n; i )
{
scanf("%lld",(a i));
}
qsort(a, n, sizeof(ll int), comp);
ll int cnt=0;
for(int i=0; i<n; i )
{
if(a[i] != a[i 1])
{
cnt ;
}
}
printf("%lldn", cnt);
cnt=0;
return 0;
}
Комментарии:
1. Я отредактировал ваш вопрос, чтобы, по крайней мере, поместить код в блоки кода, но он все еще в значительной степени нечитаем. Пожалуйста, отредактируйте свой код, чтобы сделать правильный отступ и отформатировать его. (Кроме того, вы отметили [c], и ваш код выглядит как C, но вы упомянули C 11 в названии? Пожалуйста, уточните)
2. @WeatherVane понял , я думаю, мне следует использовать *(ll int *)b-*(ll int *)a
3. Избавляться от
#define ll long long
4. Нет, функция компаратора должна быть
int comp(const void* a, const void *b)
и возвращатьint
значение, как задокументировано. Этоint
значение не связано с типом сортируемых данных.5.
return (*(long long*)a > *(long long*)b) - (*(long long*)a < *(long long*)b);