Code in ra các phần tử xuất hiện trong mảng a nhưng không xuất hiện trong mảng b bị sai

Cho mình hỏi là code này sai ở đâu. Bài là : Cho 2 mảng (a, n) và (b, m). Hãy in ra các phần tử xuất hiện trong mảng a nhưng không xuất hiện trong mảng b.In ra trên một dòng duy nhất các phần tử xuất hiện trong mảng a nhưng không xuất hiện trong mảng b, các số cách nhau bởi dấu cách (in theo thứ tự tăng dần).

#include <iostream>

using namespace std;

int NhapMang(int a[],int b[],int &n,int &m)
{
    cin >> n;
    cin >> m;
    for (int i=0;i<n;i++)
            cin >> a[i];
    for (int j=0;j<m;j++)
            cin >> b[j];
}

int Appearent(int a[],int b[],int k[],int n,int m)
{
    int bdem=0;
    for (int i=0;i<n;i++)
    {
        int dem=0;
        for (int j=0;j<m;j++)
        {
            if (a[i]==b[j])
                {
                    dem++;
                }
        }
        if (dem==0)
            {
                k[i]=a[i];
                bdem++;
                }
    }
    int temp=0;
    for (int i=0;i<bdem;i++)
    {
        for (int j=i+1;j<bdem;j++)
        if (k[i]>k[j])
        {
            temp=k[i];
            k[i]=k[i+1];
            k[i+1]=temp;
        }
        cout << k[i]<<" ";
    }
}


int main()
{
    int a[1000],b[1000],k[1000],n,m;
    NhapMang(a,b,n,m);
    Appearent(a,b,k,n,m);
    return 0;
}

sai ở dòng này, tự xử được rồi ha?

2 Likes

Sai ở chỗ:
k[i]=a[i];
(trường hợp a[0] == b[j] => (dem++) => bỏ qua hàm if(dem==0) => k[0] ko có giá trị

k[i]=k[i+1];
k[i+1]=temp;
(trường hợp k[3] = {7, 3,1} sẽ sort thành {3, 1, 7})
P/S: sai thì các bác chém nhẹ thôi nhé, em cũng gà mờ đang tự học C++ :smiley:

HI. Cảm ơn đồng chí :v

#include <iostream>

using namespace std;

int NhapMang(int a[],int b[],int &n,int &m)
{
    cin >> n;
    cin >> m;
    for (int i=0;i<n;i++)
            cin >> a[i];
    for (int j=0;j<m;j++)
            cin >> b[j];
}

int Appearent(int a[],int b[],int k[],int n,int m)
{
    int bdem=0;
    for (int i=0;i<n;i++)
    {
        int dem=0;
        for (int j=0;j<m;j++)
        {
            if (a[i]==b[j])
                {
                    dem++;
                }
        }
        if (dem==0)
            {
                k[i]=a[i];
                bdem++;
                }
    }
    for (int i=0;i<bdem;i++)
    {
        int temp=0;
        if (k[i]>k[i+1])
        {
            temp=k[i+1];
            k[i+1]=k[i];
            k[i]=temp;
        }
        cout << k[i] <<" ";
    }
}


int main()
{
    int a[1000],b[1000],k[1000],n,m;
    NhapMang(a,b,n,m);
    if (n>0&&n<=1000&&m>0&&m<=1000)
        Appearent(a,b,k,n,m);
    return 0;
}

Đoạn này là sau khi mình tự check bug lại. Nhưng ko thay đổi k[i]=a[i]. Bạn có thể cho mình biết cách sửa bài theo hướng làm của bạn k?
P/s : Vì test bài này đc có 10/100 nên mình nghĩ chắc thiếu sót đoạn nào đó. Mong các c chỉ giáo :v

ý đồ của bạn khi gán k[i] = a[i] và bdem++ là gì? Xem lại ý đồ đó có đúng ko?

sửa i thành bdem là được, còn i nào thì tự suy nghĩ đi

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