Я учусь правильно выполнять сортировку, выполняя небольшие онлайн-задания. Я написал код, но по какой-то причине он вызывает ошибку сегментации. Существует один вход для тестирования:
n = 6, k = 4
8 9 5 1 4 2
n = количество цен
k = количество цен, которые я хочу сделатьсумма
Таким образом, выход для этого случая будет 26 (потому что 9 + 8 + 5 + 4)
Но есть также один секретный тест, в котором я не вижу ввод, и когда я пытаюсь проверить его, он дает "ошибка сегментации ".
Я пытался использовать malloc, поэтому мне не нужно определять MAX_BUFFER, но это не помогло мне.
int *countings;
int *sorted;
max = price[0];
for (i=1; i<n; i++) {
if (max < price[i]) {
max = price[i];
}
}
countings = (int*)malloc(max * sizeof(int));
sorted = (int*)malloc(n * sizeof(int));
Это полный код
#include <stdio.h>
#include <stdlib.h>
#define MAX_BUFFER 100
long sum_of_k_biggest_numbers(int price[], int n, int k)
{
int max;
int i;
int countings[MAX_BUFFER];
int sorted[MAX_BUFFER];
int final_price = 0;
max = price[0];
for (i=1; i<n; i++) {
if (max < price[i]) {
max = price[i];
}
}
for (i=0; i<n; i++) {
countings[price[i]]++;
}
for (i=1; i<(max+1); i++) {
countings[i] += countings[i - 1];
}
for (i=(n-1); i>=0; i--) {
sorted[--countings[price[i]]] = price[i];
}
for (i=(n-1); i>=(n-k); i--) {
final_price += sorted[i];
}
return final_price;
}
int main(void)
{
int i, *x, n, k;
scanf("%d %d", &n, &k);
x = (int*)malloc(n * sizeof(int));
for (i = 0; i < n; i++)
scanf("%d", &x[i]);
printf("%ld\n", sum_of_k_biggest_numbers(x, n, k));
return 0;
}
Кто-нибудь может дать мне подсказку или сказать, в чем может быть проблема?