2016-03-15 36 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端

K型:

結果: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; 
} 

更新3月17日:

我修改的源代碼,也就是我試圖實現Michael Burr和Priyansh Goel的提示。這是我的結果:

#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

既然你是初學者,讓我們從最簡單的算法開始。

對於每一個我,你需要找到從我開始的k連續數的總和。然後找到它的最大值。

在此之前,你需要看看如何輸入數組。

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中的最佳方法)