构建一个代码,用于检查s_array[]
中的一组数字是array[]
的子序列,这意味着{ 1, 5, 4 }
不是{{1}的子序列} {,而array
是一个(订单很重要)
我的代码将首先检查{ 1, 4, 5}
中是否存在s_array[]
的第一个元素,一旦找到一个公共元素,它将继续检查array[]
的其余元素是否也是存在于s_array[]
中并且顺序相同(其他元素可以在它们之间)
array[]
老实说,我无法看到它是算法还是编码错误
答案 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;
}
}
}