01/10/2018, 14:20

Cho mình hỏi là code này sai ở đâu

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;
}
viết 16:36 ngày 01/10/2018

k[i]=a[i];

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

Linh viết 16:24 ngày 01/10/2018

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++

Đỗ Nam viết 16:24 ngày 01/10/2018

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

Đỗ Nam viết 16:37 ngày 01/10/2018

#include

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;
}

Đỗ Nam viết 16:25 ngày 01/10/2018

Đ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

viết 16:34 ngày 01/10/2018

ý đồ 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

Bài liên quan
0