2016-03-15 5 views
-1

Приведенный несортированный массив A[0...n-1] целых чисел и целое число k; желаемый алгоритм в C должен вычислять максимальное значение каждого смежного подмассива размером k. Например, если A = [8,5,10,7,9,4,15,12,90,13] и k=4, то findKMax(A,4,10) возвращает 10 10 10 15 15 90 90.Максимальное значение каждого непрерывного подмассива

Моя цель - реализовать алгоритм как программу C, которая считывает элементы A, читает k, а затем печатает результат функции findKMax(A,4,10). Ввода/вывода пример показан сильфон (вход набирается жирным шрифтом):

Элементы A: 8 5 10 7 9 4 15 12 90 13 конец

типа К:

Результаты: 10 10 10 15 15 90 90

Что я пробовал до сих пор? Пожалуйста, имейте в виду, что я абсолютный новичок в C. Вот мой код:

#include <stdio.h> 

void findKMax(int A[], int k, int n) { 

int j; 
int max; 

for (int i = 0; i <= n-k; i++) { 
    max = A[i]; 

    for (j = 1; j < k; j++) { 
     if (A[i+j] > max) 
      max = A[i+j]; 
    } 

} 
} 

int main() { 

int n = sizeof(A); 
int k = 4; 

printf("Elements of A: "); 
scanf("%d", &A[i]); 
printf("Type k: %d", k); 
printf("Results: %d", &max); 

return 0; 
} 

Обновление 17 марта:

Я изменил исходный код, то я пытался реализовать намеки Майкла Берра и Прияна Гола. Вот мой результат:

#include <stdio.h> 

// Returning the largest value in subarray of size k. 
void findKMax(int A[], int k, int n) { 

int j; 
int largestValueOfSubarray; 

for (int i = 0; i <= n-k; i++) { 
    largestValueOfSubarray = A[i]; 

    for (j = 1; j < k; j++) { 
     if (A[i+j] > largestValueOfSubarray) 
      largestValueOfSubarray = A[i+j]; 
    } 
    printf("Type k: %d", k); 

} 
return largestValueOfSubarray; 
} 

int main() { 

int n = 10; 
int A[n]; 
// Reading values into array A. 
for (int i = 0; i < n; i++) { 
    printf("Enter the %d-th element of the array A: \n", i); 
    scanf("%d", &A[i]); 
} 

// Printing of all values of array A. 
for (int i = 0; i < n; i++) { 
    printf("\nA[%d] = %d", i, A[i]); 
} 

printf("\n\n"); 

// Returning the largest value in array A. 
int largestValue = A[0]; 
for (int i = 0; i < n; i++) { 
    if (A[i] > largestValue) { 
     largestValue = A[i]; 
    } 
} 
printf("The largest value in the array A is %d. \n", largestValue); 

return 0; 
} 

Я думаю, что кода не так много. Может кто-нибудь дать мне подсказку, как сделать все остальное. Мне нужен совет, как «объединить» фрагменты кода в запущенную программу.

+2

Так в чем проблема? –

+0

Я использую XCode IDE, и код не работает. –

+1

«код не работает», можете ли вы быть немного менее расплывчатым? –

ответ

0

Поскольку вы новичок, давайте начнем с самого простого алгоритма.

для каждого i, вам нужно найти сумму k непрерывных чисел, начиная с i. И затем найдите максимальный результат.

Перед этим вам нужно посмотреть, как вводить ввод в массив.

int n; 
scanf("%d",&n); 

int a[n]; 
for(int i = 0; i < n; i++) { 
    scanf("%d",&a[i]); 
} 

Кроме того, вам нужно будет вызвать функцию findKMax(a,n,k); В функции findKMax, вы должны реализовать алгоритм, который я уже упоминал.

Я не буду предоставлять код, чтобы вы могли попробовать самостоятельно. Если вы столкнулись с какой-либо проблемой, скажите мне.

СОВЕТ: Вам необходимо использовать вложенные петли.

0

Вы находите максимальное значение в окне много раз, но выводите только последнее максимальное значение.

Самый простой коррекции - добавить вывод в конце главного цикла:

for (int i = 0; i <= n-k; i++) { 
    max = A[i]; 

    for (j = 1; j < k; j++) { 
     if (A[i+j] > max) 
      max = A[i+j]; 
    } 
    printf("Type k: %d", k); 
} 

Следующий шаг - собрать все локальные значения макс в одну строку "10 10 10 15 15 90 90" или дополнительный массив длины n-k+1: [10,10,10,15,15,90,90] и распечатать его после того, как основной (я не знаю, как это лучше всего подходит для C)

Смежные вопросы