Code kiểm tra mảng B có phải dãy con của mảng A ra kết quả sai

VD nhập mảng A là : 4 5 6 7
mảng B là : 5 6 7
kết quả lại cho là B không phải là mảng con của A

#include<stdio.h>
#include <conio.h>
#include <iostream>
using namespace std;
int A[100],n,a;
void main()
{
	int nb,na;
	int B[100];
Nhap('A',A,n);
	Xuat('A',A,n);
	Nhap('B',B,nb);
	Xuat('B',B,nb);
	int check=KiemTraMangBCoPhaiLaMangConCuaMangA(A,B,n,nb);
	if(check!=1)
	{
		cout<<"\nMang B khong phai la mang con cua A";
	}
	else
	{cout<<"\nMang B la mang con cua A";}
	getch();
}
void Nhap(char ten,int A[],int &n)
{	
 do
{
	int i;
	cout<<"Nhap so phan tu cua day:";
	cin>>n;
	if(n <= 1 || n > 100)
	{
		cout<<"\nSo phan tu khong hop le. Xin kiem tra lai !";
	}
}
 while(n <= 1 || n > 100);
	for(int i=1;i<=n;i++)
	{
		cout<<ten<<"["<<i<<"]=";
		cin>>A[i];
	}
}
void Xuat(char ten,int A[],int n)
{
	cout<<"\nXuat:";
	for(int i=1;i<=n;i++)
		cout<<ten<<"["<<i<<"]="<<A[i]<<endl;
}
int KiemTraMangBCoPhaiLaMangConCuaMangA(int A[], int B[], int n, int nb)
{
	int i,j,check=0;
	for(i=1;i<=nb;i++)
	{
		if(A[i]==B[1])
		{
			int start = i;
			check=1;
			for(j=1;j<=n;j++)
			{
				if(B[j]!=A[start++])
				{
					check=0;
					break;
				}
			}
			if(check==1)
			{
				return check;
			}
		}
	}
	return check;
}

Mảng bắt đầu từ 0.
Sao lại chắc là đúng rồi. Nếu thực sự đúng thì kết quả đã không sai.

1 Like

mình cho chạy từ 1 cũng đc mà vì mình nhập từ 1

Định lấn đất của người khác à? Mảng của bạn đang lấn sang ô nhớ khác, việc này dẫn đến những lỗi không kiểm soát được.
Bạn sai cơ bản, cực kì sai. Chưa nói đến thuật toán của bạn đúng hay không.

1 Like

Trong hàm kiểm tra, bạn chạy vòng lặp lẫn lộn giữa AB nên dẫn đến sai.

  • i chạy đến nb mà lại dùng cho A.
  • j chạy đến n mà dùng cho B.
1 Like

đúng r mình nhầm thanks bạn nhiều :blush::blush:

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?