给定一个未整数的整数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: 4
结果: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;
}
我想代码没有那么多。任何人都可以给我一个提示如何做其余的事情。我需要一个建议如何将这些代码“组合”到一个正在运行的程序中。
答案 0 :(得分:0)
由于您是初学者,让我们从最简单的算法开始。
对于每一个i,你需要从那个i开始找到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函数中,您必须实现我提到的算法。
我不会提供代码,以便您可以自己尝试。如果您遇到任何问题,请告诉我。
提示:您需要使用嵌套循环。
答案 1 :(得分: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)