Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 每个连续子阵列的最大值_C_Arrays_Algorithm - Fatal编程技术网

C 每个连续子阵列的最大值

C 每个连续子阵列的最大值,c,arrays,algorithm,C,Arrays,Algorithm,给定一个未排序的整数数组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 90 我的目标是将算法实现为一个C程序,它读取a的元素,读取k,然后打印函数findKMax(a,4,10)的结果。输入/输出示例如下所示(输入以粗体排版): A的要素:851079941529013结束 类型k:4 结果:1010159090 到目前为止我都试了些什

给定一个未排序的整数数组
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 90

我的目标是将算法实现为一个C程序,它读取
a
的元素,读取
k
,然后打印函数
findKMax(a,4,10)
的结果。输入/输出示例如下所示(输入以粗体排版):

A的要素:851079941529013结束

类型k:4

结果:1010159090

到目前为止我都试了些什么?请记住,我是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;
}
#包括
void findKMax(int A[],int k,int n){
int j;
int max;
对于(int i=0;i max)
max=A[i+j];
}
}
}
int main(){
int n=sizeof(A);
int k=4;
printf(“A的元素:”);
scanf(“%d”、&A[i]);
printf(“k类:%d”,k);
printf(“结果:%d”,&max);
返回0;
}
3月17日更新:

我修改了源代码,也就是说,我试图实现Michael Burr和Priyans 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;
}
#包括
//返回大小为k的子数组中的最大值。
void findKMax(int A[],int k,int n){
int j;
int子阵列的最大值;
对于(int i=0;i子数组的最大值)
子阵列的最大值=A[i+j];
}
printf(“k类:%d”,k);
}
返回子数组的最大值;
}
int main(){
int n=10;
int A[n];
//将值读入数组A。
对于(int i=0;i最大值){
最大值=A[i];
}
}
printf(“数组A中的最大值为%d.\n”,最大值);
返回0;
}

我想没有那么多的代码。谁能给我一个提示怎么做剩下的事。我需要一个如何将代码片段“组合”到运行程序中的建议。

既然您是初学者,让我们从最简单的算法开始

对于每一个i,你需要找到从该i开始的k个连续数的和。然后找到它的最大值

在此之前,您需要了解如何向数组获取输入

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

int a[n];
for(int i = 0; i < n; i++) {
  scanf("%d",&a[i]);
}
intn;
scanf(“%d”和“&n”);
int a[n];
对于(int i=0;i
此外,还需要调用函数
findKMax(a,n,k)
在findKMax函数中,必须实现我提到的算法

我不会提供代码,以便您可以自己尝试。如果你面临任何问题,一定要告诉我


提示:您需要使用嵌套循环。

您在窗口中多次找到最大值,但只输出最后一个最大值

最简单的校正-在主循环结束时添加输出:

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);
}
for(int i=0;i max)
max=A[i+j];
}
printf(“k类:%d”,k);
}

下一步-收集单个字符串中的所有本地最大值
“10 10 15 90”
或长度为
n-k+1:[10,10,10,15,15,90,90]
的附加数组,并在主循环后打印(我不知道C中的最佳方法)

那么问题出在哪里呢?我使用的是XCode IDE,但代码不起作用。“代码不起作用”好吧,你能稍微说清楚一点吗?什么不起作用?它编译吗?它跑吗?顺便说一句,我已经理解了问题陈述,在阅读了大约5次之后…分步进行。例如,首先编写一个程序,允许您输入一个数组,并在该数组工作后显示该数组的内容,然后添加查找该数组的max元素的功能。然后转到查找
k
子数组的最大元素的下一步(提示:查找子数组的最大值实际上与查找数组的最大值相同-子数组只是一个具有不同起点和较少元素数的数组)。