给定数组是另一个数组的子序列

时间:2017-12-01 14:05:23

标签: c arrays nested-loops

构建一个代码,用于检查s_array[]中的一组数字是array[]的子序列,这意味着{ 1, 5, 4 }不是{{1}的子序列} {,而array是一个(订单很重要)

我的代码将首先检查{ 1, 4, 5}中是否存在s_array[]的第一个元素,一旦找到一个公共元素,它将继续检查array[]的其余元素是否也是存在于s_array[]中并且顺序相同(其他元素可以在它们之间)

array[]
老实说,我无法看到它是算法还是编码错误

3 个答案:

答案 0 :(得分:4)

首先,第一个循环是错误的,因为i上升到15,并且在此索引处,您访问array越界(未定义的行为)。

然后循环非常简单。你只需要

  • 数组的一个循环i索引和s_array
  • si 如果您在si 找到array[i]号,则
  • 仅递增s_array[si]
  • 如果i涵盖array,如果si获得了子数组元素的数量(3)
  • ,则停止循环
  • 如果si至少为3,则找到子序列

那是

int s_array[] = { 5, 7, 13 };
int array[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 };

 int si,i;
 for (si=0,i=0 ; i<15 && si<3 ; i++) {
    if (s_array[si] == array[i]) si++;
 }

 printf ("Sub was %s\n", si<3 ? "not found":"found");

答案 1 :(得分:0)

在您的示例中,问题是循环get由外部if条件终止:

    if( j == counter ){
           printf( "B is a sub-sequence of A.\n" );
           break;
    }
    else{
           printf( "B is not a sub-sequence of A.\n" );
           break;
    }

在第一个循环周期后,程序检查这个条件并中断。 这种情况应该在循环之外。

答案 2 :(得分:0)

J不应该等于3并且第一个fot循环索引为14(或者使它严格小于15而不是小于或等于)?在你的第二个for循环中,j可能等于3而s_array [3]无效。我会尝试类似的东西:

Bcount = 0;
counter = 1;
for( i = 0; i <= 14; i++ ){
    if( s_array[Bcount] == array[i] ){
        counter++;
        Bcount++;
        if(counter == 3){
              printf("Success");
              break;
        }
    }
}