注册 登录
编程论坛 C++教室

额!!!!这个这个??

xiamomo 发布于 2012-11-29 16:41, 289 次点击
编写程序P4,从键盘输入M个(M<=40)正整数,以0表示结束,称其为数据串A。再从键盘输入N个(B<=20)正整数或-1,以0表示结束,称其为数据串B。
从数据串A的头上开始,搜索其中是否有连续的N个数据与数据串B匹配,所谓匹配,是指数据串A中这N个数据与数据串B的数值、顺序都相同,-1视作与任何正整数相同。如果存在匹配,在屏幕上输出数据串A中的匹配起始位置(开头的数据位置是1而不是0),否则输出0。
例如,键盘输入的是 3,2,4,2,4,5,9,6,5,8,0,2,-1,5,-1,0,则数据串A是3,2,4,2,4,5,9,6,5,8,数据串B是2,-1,5,-1,数据串A中的2,4,5,9与数据串B匹配,屏幕输出4。
2 回复
#2
azzbcc2012-11-29 18:38
B中能有-1么
#3
azzbcc2012-11-29 19:04
程序代码:
#include <stdio.h>
int Compare(int a[], int b[])
{
    int i, j;
    for (i = 1, j = 1;i <= a[0]
        && j <= b[0];i++, j++)
    {
        if (a[i] != b[j]// && a[i] != -1
            && b[j] != -1)
        {
            i -= j - 1;
            j = 0;
            continue;
        }
    }
    if (j - 1 == b[0])
        return i - j + 1;
    return 0;
}
int main()
{
    int A[41] = {0}, B[21] = {0};
    int temp;
    int i = 1;
    while (1)
    {
        scanf("%d,", &temp);
        if (0 == temp)
            break;
        A[i++] = temp;
    }
    A[0] = i - 1;

    i = 1;
    while (1)
    {
        scanf("%d,", &temp);
        if (0 == temp)
            break;
        B[i++] = temp;
    }
    B[0] = i - 1;
    printf("%d\n", Compare(A, B));
    return 1;
}


[ 本帖最后由 azzbcc 于 2012-11-29 19:19 编辑 ]
1