gpt4 book ai didi

c - 数组中包含的输入序列

转载 作者:太空宇宙 更新时间:2023-11-04 08:54:17 24 4
gpt4 key购买 nike

我正在尝试实现此练习,但效果不是很好。它应该告诉我数组 B 中的序列是否包含在 A 中。有什么想法吗?我无法让它适用于每个序列。

#include <stdio.h>
#include <stdlib.h>

#define N 6
#define M 3

int contains(int v[], int n);

/*
*
*/
int main(int argc, char** argv)
{
int A[N], B[M];
int i, j = 0, flag = 0, contained = 1;

printf("Array A\n");
for (i = 0; i < N; i++)
{
printf("Insert element: ");
scanf("%d", &A[i]);
}

printf("Array B\n");
for (i = 0; i < M; i++)
{
printf("Insert element: ");
scanf("%d", &B[i]);
}

for (i = 0; i < (N - M + 1); i++)
{
flag = 0;

if (A[i] == B[j])
{
flag = 1;
j++;
}

if (flag == 0 && (i == N-M))
{
contained = 0;
printf("The sequence B is not contained in A!\n");
break;
}
}

if (contained == 1)
{
printf("The sequence B is contained in A\n");
}

return (EXIT_SUCCESS);
}

最佳答案

当你在序列中有一个不匹配的时候,你永远不会重置 j 所以你开始寻找序列的其余部分,从 j 留下的任何值开始.您的程序查找序列 B 但不要求它是连续的。

您也不会检查序列何时完成,例如 B 位于 A 的开头,j 将继续递增,B[j] 将溢出到不太可能与 A 匹配的未知内存中,因此会给您一个不正确的结果。要解决此问题,只需检查何时找到整个 B 并退出循环。

替换以下内容将解决此问题:

if (j == M) break; // Break the loop when B sequence is found
if (flag == 0)
{
j = 0; // This was missing
if (i == N-M)
{
contained = 0;
printf("The sequence B is not contained in A!\n");
break;
}
}

关于c - 数组中包含的输入序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18152888/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com