PDA

View Full Version : Loại bỏ tất cả các phần tử trùng trong mảng


iamlordvoldemort
21-08-2011, 12:31
Nhập vào một mảng, nếu có n phần tử trùng nhau thì xóa đi...

Vấn đề là nếu n là số chẵn thì code đúng nhưng nếu n là số lẻ thì không làm được, do 2 thằng trùng trước xóa mất rồi :pudency:
Em tính nạp những vị trí trùng vào một mảng b khác, rồi xóa nhưng chưa code được.
Bác nào viết dùm em đoạn code đó đi, hoặc nếu có thuật toán hay hơn thì nêu lên để em code thử xem sao:sweat:

P.E Onimusha
21-08-2011, 12:41
Vấn đề là bác chỉ cần làm được hay cần tối ưu? Nếu chỉ cần làm được thì có gì khó đâu :-S

iamlordvoldemort
21-08-2011, 12:43
Cần làm được thôi....

P.E Onimusha
21-08-2011, 12:56
Cần làm được thôi....
1. Sắp xếp mảng.
2. Duyệt từ 1 ~> n-1, xóa các phần tử = với phần tử phía sau nó.
3. Dồn mảng (chép sang mảng mới) nếu cần.

iamlordvoldemort
21-08-2011, 13:02
bó tay cái chỗ xóa đó bác ơi, giả dụ 3 số đi nhé :sweat:
Xóa 2 số đầu thì số thứ 3 đâu bị trùng nữa...:shame:

Nếu được bác code thử em chạy xem sao :pudency:
thanks

bl4ckdr4g00n
21-08-2011, 13:02
ko hiểu câu này cho lắm. Nói rõ hơn xem nào?

ví dụ mảng 1 5 8 6 0 4 7 6 1 8 thì xóa tất cả 1, 6 và 8 để thành 5 0 4 7 à?
Nhập vào một mảng, nếu có n phần tử trùng nhau thì xóa đi...

P.E Onimusha
21-08-2011, 13:11
bó tay cái chỗ xóa đó bác ơi, giả dụ 3 số đi nhé :sweat:
Xóa 2 số đầu thì số thứ 3 đâu bị trùng nữa...:shame:

Nếu được bác code thử em chạy xem sao :pudency:
thanks
Ủa vậy ý bác là sao? Muốn xóa toàn bộ những cái bị trùng à :surrender:
Thế thì:
1. Sắp xếp mảng.
2. Duyệt từ 1 ~> n-1, nếu phần tử nào = với phần tử phía sau nó thì thêm vào mảng X.
3. Duyệt từ 1 ~> n, nếu phần tử nào xuất hiện trong mảng X thì xóa đi :chaymau:

iamlordvoldemort
21-08-2011, 13:22
Ủa vậy ý bác là sao? Muốn xóa toàn bộ những cái bị trùng à :surrender:
Thế thì:
1. Sắp xếp mảng.
2. Duyệt từ 1 ~> n-1, nếu phần tử nào = với phần tử phía sau nó thì thêm vào mảng X.
3. Duyệt từ 1 ~> n, nếu phần tử nào xuất hiện trong mảng X thì xóa đi :chaymau:
Yêu bác ghê :beauty:
thuật toán này chắc ok rồi :sexy:
Hồi code thử...
p/s: bác học cntt ah:shame:

P.E Onimusha
21-08-2011, 13:30
Yêu bác ghê :beauty:
thuật toán này chắc ok rồi :sexy:
Hồi code thử...
p/s: bác học cntt ah:shame:
Dạ thuật toán đó thì chắc làm được việc thôi, chứ mảng lớn mà bác không tối ưu hóa thì cứ gọi là xác định :gach:
Theo em nên thay đổi thế này để giảm độ phức tạp:
1. Sắp xếp mảng.
2. Duyệt từ 1 ~> n-1, nếu phần tử nào = với phần tử phía sau nó thì lưu cả 2 vị trí vào mảng X (lưu ý là vị trí chứ không phải giá trị).
3. Duyệt mảng X, xóa các phần tử với vị trí tương ứng trong mảng n (xóa giả thôi - tức gán = -1 chẳng hạn) :nosebleed:

iamlordvoldemort
21-08-2011, 14:07
Dạ sáng này em cũng tính như thế rồi nhưng code vẫn không được...
đau đầu mấy cái hàm lắm rồi :gach:

Jay
22-08-2011, 09:57
Em tính nạp những vị trí trùng vào một mảng b khác, rồi xóa nhưng chưa code được.
thay vì thế này thì nạp những giá trị trùng vào mảng b khác xong rồi duyệt lại mảng đầu mà xóa.

Lưu ví trí vào mảng b thì bị vấn đề là sau khi xóa 1 phần tử khỏi mảng a thì toàn bộ vị trí của các phần tử nằm sau đều thay đổi, xử lý phiền hơn.

xPE
22-08-2011, 10:14
thay vì thế này thì nạp những giá trị trùng vào mảng b khác xong rồi duyệt lại mảng đầu mà xóa.

Lưu ví trí vào mảng b thì bị vấn đề là sau khi xóa 1 phần tử khỏi mảng a thì toàn bộ vị trí của các phần tử nằm sau đều thay đổi, xử lý phiền hơn.
Xóa giả thôi, bước xóa thật để sau.
Nếu lưu giá trị vào mảng b thì sẽ phải duyệt (m x n) phần tử (m của mảng gốc và n của mảng b), trong khi lưu vị trí thì chỉ cần (m + n).
Cả 2 đều có thể sẽ cần thêm bước dồn phần tử để xóa khoảng trống nếu cần :go:

Jay
22-08-2011, 14:11
Mà cách tốt nhất là xài c# rồi dùng LinQ:

int[] numbers = { 1, 3, 4, 9, 2, 4, 3 };
int[] numToRemove = {4, 3};
numbers = numbers.Where(val => numToRemove.indexOf(val) < 0).ToArray();

Bod3osoai
22-08-2011, 14:34
Đang ngồi cơ quan.Tối về cho code :">

xPE
22-08-2011, 15:00
Mà cách tốt nhất là xài c# rồi dùng LinQ:

int[] numbers = { 1, 3, 4, 9, 2, 4, 3 };
int[] numToRemove = {4, 3};
numbers = numbers.Where(val => numToRemove.indexOf(val) < 0).ToArray();
Có gì tốt :surrender: Cái quan trọng là người ta chưa biết thuật toán, lại đi khuyên dùng hàng có sẵn :stick:

noobcsess
22-08-2011, 15:54
Toàn cao thủ :D
Mình mạo muội đề xuất một phương pháp mình cho là khá tổi ưu trong những cách mà hiện tại mình nghĩ ra. :)
Nếu bạn học hàm băm, bảng băm rồi thì có thể sử dụng bảng băm để giải bài toán này, nếu bộ nhớ ko thành vấn đề thì thời gian tính sẽ được cải thiện.
Coi mỗi node trong linked list ở mỗi slot của hash table là 1 struct như sau:
struct node {
int value;
int isExisted = 0;
}
Sau đó chỉ việc băm từng thằng trong mảng vào, nếu slot đang free thì set value cho new node là value của phần tử mảng. Nếu slot ko free thì kiểm tra xem trong linked list ở slot đó có thằng nào trùng value ko, nếu trùng thì set isExisted = 1, và next, nếu ko trùng thì tạo new node khác. Cứ thế. Sau khi băm xong thì duyệt hash table và chỉ sao value của những node có biến isExisted = 0 mà thôi. :D

Jay
22-08-2011, 16:13
Có gì tốt :surrender: Cái quan trọng là người ta chưa biết thuật toán, lại đi khuyên dùng hàng có sẵn :stick:

thuật toán thì ở trên đã nói hết còn gì ?

xPE
22-08-2011, 16:16
thuật toán thì ở trên đã nói hết còn gì ?
Chủ topic vẫn còn đang loay hoay ở mấy cái hàm cơ mà :sexy:

MrQ
22-08-2011, 17:39
Man mọi nhất : làm cái hàm exists kiểm tra coi 1 phần tử có trong mảng ko, tạo mảng B rỗng, duyệt mảng A, phần tử a chưa có trong B thì thêm vào B. Hết =))

Z.K.
22-08-2011, 18:15
hóng các cao nhân và chờ feedback của chủ thớt :D

iamlordvoldemort
22-08-2011, 20:40
:ah:
Oài thanks các bác nhiều lắm, em xong tối hôm qua rồi :D
theo cái thuật toán bác P.E Onimusha thì sắp xếp lại mảng, rồi kiểm tra cái a[i] == a[i+1]
Cái này em dùng thêm một biến dem để đếm coi có bao nhiêu cái trùng nhau rồi cuối cùng a[i]= a[i+dem] //i la vi trí trùng.

Giờ thì vẫn đang bó tay với thuật toán xóa 2 mảng có các phần tử trùng nhau :stick:
Ko hiểu code sao mà thành vòng lặp vô hạng luôn rồi :pudency:

p/s: cho em hỏi trong C/C++ khi dùng vòng lặp for(i=1;i<=n;i++)
nếu trong vòng lặp có lệnh n-- thì làm cách nào để nạp lại lên vòng lặp :stick:

noobcsess
22-08-2011, 21:55
^
i--

Mr.Win
22-08-2011, 22:10
dùng 1 mảng phụ khác lưu những phần tử và vị trí trùng nhau sau đó duyệt xoá mảng b thử !!

xPE
22-08-2011, 22:44
:ah:
Oài thanks các bác nhiều lắm, em xong tối hôm qua rồi :D
theo cái thuật toán bác P.E Onimusha thì sắp xếp lại mảng, rồi kiểm tra cái a[i] == a[i+1]
Cái này em dùng thêm một biến dem để đếm coi có bao nhiêu cái trùng nhau rồi cuối cùng a[i]= a[i+dem] //i la vi trí trùng.

Giờ thì vẫn đang bó tay với thuật toán xóa 2 mảng có các phần tử trùng nhau :stick:
Ko hiểu code sao mà thành vòng lặp vô hạng luôn rồi :pudency:

p/s: cho em hỏi trong C/C++ khi dùng vòng lặp for(i=1;i<=n;i++)
nếu trong vòng lặp có lệnh n-- thì làm cách nào để nạp lại lên vòng lặp :stick:

Giờ bác nêu một yêu cầu rõ ràng, ví dụ cụ thể, anh em sẽ giúp. Sao em đọc mấy dòng của bác mà chóng mặt quá :sosad:

DQ.PhonG
23-08-2011, 01:31
Giờ bác nêu một yêu cầu rõ ràng, ví dụ cụ thể, anh em sẽ giúp. Sao em đọc mấy dòng của bác mà chóng mặt quá :sosad:

có khi phải đưa đề gốc lên thì sẽ dễ đưa ra phương án hơn :sexy:

roninvn
23-08-2011, 10:18
Nếu chủ thớt cần tối ưu hóa về thời gian thực hiện thì nên làm theo cách này :

Cần 2 array & 1 binary tree

-Array gốc
-Array mới để lưu kết quả
-Chạy vòng for trên array gốc, kiểm tra xem phần tử có trên tree ko, nếu ko có thì thêm vào array mới & lưu lên tree theo luật left child node < parent node < right child node.

iamlordvoldemort
23-08-2011, 22:10
#include <iostream>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>

using namespace std;
int input(int,int);
int in(int,int);
int xoatrung(int &,int &);
int sapxep(int &,int&);
int traodoi(int &,int &);

int traodoi(int &a,int &b)
{
a = a+b;
b = a-b;
a = a-b;
return 0;
}

int sapxep(int a[],int n)
{
for(int i=1; i<=n; i++)
{
for(int j=i+1; j<=n; j++)
if(a[i]>a[j]) traodoi(a[i],a[j]);
}

return 0;
}
int xoatrung(int a[],int n)
{
sapxep(a,n);
int dem;
for(int z=1;z<=n;z++)
for(int i=1;i<=n;i++)
{
if(a[i]==a[i+1])
{
dem=1;
for(int j=i+1;j<=n;j++)
if(a[i]==a[j]) dem++;
for(int x=i;x<=n-1;x++) a[x]=a[x+dem];
n-=dem;
}
}
return n;
}

int input(int a[],int n)
{
int i;
for(i=1;i<=n;i++)
{
cout<<"Nhap so thu "<<i<<" : ";
cin>>a[i];
}
return 0;
}

int in(int a[],int n)
{
int i;
for(i=1;i<=n;i++)
cout<<a[i]<<"\t";
cout<<endl;
return 0;
}


int main()
{
int n,n1,n2,z,x,k,x1,k1,a[101],b[101];
cout<<"Nhap mang mot. \n";
do
{ cout<<"Nhap n: ";
cin>>n1;
} while (n1<2 && n1>101);
input(a,n1);
in(a,xoatrung(a,n1));
cout<<"Nhap mang hai.\n";
do
{ cout<<"Nhap n: ";
cin>>n2;
} while (n2<2 && n2>101);
input(b,n2);
in(b,xoatrung(b,n2));
for(x=1;x<=n1;x++) //bắt đầu loại các phần tử mảng a trùng mảng b
{
for(k=1;k<=n2;k++)
if(a[x]=b[k])
{
for(x1=x;x1<=n1;x1++) a[x1]=a[x1+1];
for(k1=k;k1<=n2;k1++) b[k1]=b[k1+1];

}
n2--;
n1--;
}
cout<<"Mang mot sau khi loai phan tu trung mang hai\n";
in(a,n1);
cout<<"\n";
cout<<"Mang hai sau khi loai phan tu trung mang mot\n";
in(b,n2);
cout<<"\n";
return 0;
}
Code em thế này đây ạ :pudency:

Đề bài:Nhập vào 2 mảng một chiều, xóa trên 2 mảng này tất cả các phần tử trùng nhau của 2 mảng.
gợi ý em cái thuật toán :adore:

goddy
24-08-2011, 11:12
:ah:
Oài thanks các bác nhiều lắm, em xong tối hôm qua rồi :D
theo cái thuật toán bác P.E Onimusha thì sắp xếp lại mảng, rồi kiểm tra cái a[i] == a[i+1]
Cái này em dùng thêm một biến dem để đếm coi có bao nhiêu cái trùng nhau rồi cuối cùng a[i]= a[i+dem] //i la vi trí trùng.

Giờ thì vẫn đang bó tay với thuật toán xóa 2 mảng có các phần tử trùng nhau :stick:
Ko hiểu code sao mà thành vòng lặp vô hạng luôn rồi :pudency:

p/s: cho em hỏi trong C/C++ khi dùng vòng lặp for(i=1;i<=n;i++)
nếu trong vòng lặp có lệnh n-- thì làm cách nào để nạp lại lên vòng lặp :stick:


Xong bài toán xóa phần tử trùng trong 1 mảng thì 2 mảng nó cũng thế mà. Gộp 2 mảng lại làm 1 mảng, lưu vị trí các phần tử 2 mảng lại. Xóa phần tử trùng trong mảng mới vừa gộp (xóa giả thôi, gán trùng nhau thành -1 chẳng hạn). Xong tách mảng vừa xử lý ra thành 2 mảng như cũ (dựa vào vị trí đã lưu). Cuối cùng xóa các phần tử bằng -1 ở 2 mảng mới => DONE :byebye:

noobcsess
24-08-2011, 13:20
Xong bài toán xóa phần tử trùng trong 1 mảng thì 2 mảng nó cũng thế mà. Gộp 2 mảng lại làm 1 mảng, lưu vị trí các phần tử 2 mảng lại. Xóa phần tử trùng trong mảng mới vừa gộp (xóa giả thôi, gán trùng nhau thành -1 chẳng hạn). Xong tách mảng vừa xử lý ra thành 2 mảng như cũ (dựa vào vị trí đã lưu). Cuối cùng xóa các phần tử bằng -1 ở 2 mảng mới => DONE :byebye:

Done but it's wrong ! :">

Solution:
Nếu bạn có đọc solution của mình về bài tập trước thì sửa lại 1 chút là ngon.
- Thêm 1 biến lưu label của mảng chứa nó vào node struct.
- Băm hết mảng 1, kể cả trùng cũng ko change isExisted.
- Băm mảng 2 và áp dụng tiếp giải thuật trước (trùng thì change)
- Cuối cùng là vớt.

iamlordvoldemort
24-08-2011, 20:08
Done but it's wrong ! :">

Solution:
Nếu bạn có đọc solution của mình về bài tập trước thì sửa lại 1 chút là ngon.
- Thêm 1 biến lưu label của mảng chứa nó vào node struct.
- Băm hết mảng 1, kể cả trùng cũng ko change isExisted.
- Băm mảng 2 và áp dụng tiếp giải thuật trước (trùng thì change)
- Cuối cùng là vớt.
Mình mới học tới mảng và hàm của C thôi, chưa tới con trỏ nữa mà :pudency:

quanghy
24-08-2011, 21:01
e đọc từ đầu đến đuôi vẫn chưa hiểu bác có mấy bài toán cần giải quyết, và mỗi bài yêu cầu nó như thế nào. Bác có thê tóm tắt lại không để e thử cách của e thử.

iamlordvoldemort
24-08-2011, 22:14
e đọc từ đầu đến đuôi vẫn chưa hiểu bác có mấy bài toán cần giải quyết, và mỗi bài yêu cầu nó như thế nào. Bác có thê tóm tắt lại không để e thử cách của e thử.
Nhập vào dữ liệu vào 2 mảng, xét từng mảng nếu có các phần tử trùng nhau thì xóa chúng đi tiếp theo xét 2 mảng a và b đó nếu có phần tử mảng này trùng phần tử mảng kia thì xóa chúng luôn.

//mình trình bày khó hiểu thế sao ? :sweat:

xPE
24-08-2011, 23:00
Em code thử với 2 mảng xác định, bác tự sửa đổi nhé :)
Mảng Z là mảng 2 chiều sẽ dùng để gộp 2 mảng X và Y (mỗi phần tử của mảng Z là 1 mảng gồm 2 phần tử, phần tử 0 chứa giá trị, phần tử 1 chứa số thứ tự, dùng để biết một phần tử nào đó trong mảng Z thuộc về mảng X hay mảng Y), lưu ý số phần tử của mảng Z phải bằng tổng số phần tử của 2 mảng X và Y.

#include <iostream>
using namespace std;

int anX[] = {1, 2, 3, 3, 3, 4, 5, 6 ,7, 7, 8, 8, 9, 10};
int anY[] = {2, 4, 6, 8, 10, 12, 14, 16, 18, 20};
int anZ[24][2];
int nLengthX = 14, nLengthY = 10, nLengthZ = 24;

void swapItems(int a[], int b[])
{
int nValue = a[0], nArray = a[1];
a[0] = b[0]; a[1] = b[1];
b[0] = nValue; b[1] = nArray;

}

/* Sap xep mang an gom nLength phan tu theo thu tu tang dan */
void sortArray()
{
for (int i = 0; i < nLengthZ - 1; i++)
{
for (int j = i + 1; j < nLengthZ; j++)
{
if (anZ[i][0] > anZ[j][0])
{
swapItems(anZ[i], anZ[j]);
}
}
}
}

/* Gop 2 mang anX và anY vao mang anZ */
void mergeArrays()
{
for (int i = 0; i < nLengthX; i++)
{
anZ[i][0] = anX[i];
anZ[i][1] = 1;
}
for (int j = 0; j < nLengthY; j++)
{
anZ[j + nLengthX][0] = anY[j];
anZ[j + nLengthX][1] = 2;
}
}

/* Xoa bo cac phan tu trung nhau trong mang anZ */
void removeDupItems()
{
int* anPosToBeRemoved = new int[nLengthZ * 2];
int nDupItemsCount = 0;

// Tao danh sach luu cac vi tri chua phan tu trung nhau
for (int i = 0; i < nLengthZ; i++)
{
if (anZ[i][0] == anZ[i + 1][0])
{
anPosToBeRemoved[nDupItemsCount++] = i;
anPosToBeRemoved[nDupItemsCount++] = i + 1;
}
}

// Xoa cac vi tri da duoc luu o buoc tren
for (int i = 0; i < nDupItemsCount; i++)
{
int nPos = anPosToBeRemoved[i];
anZ[nPos][0] = -1;
}
}

/* Xoa bo phan tu cua 2 mang anX va anY (xoa gia - gan = -1) */
void clearArray()
{
for (int i = 0; i < nLengthX; i++)
{
anX[i] = -1;
}
for (int i = 0; i < nLengthY; i++)
{
anY[i] = -1;
}
}

/* Trich xuat mang anZ tro ve 2 mang anX va anY */
void extractArray()
{
clearArray();
int nItemsOfArrayX = 0, nItemsOfArrayY = 0;

for (int i = 0; i < nLengthZ; i++)
{
if (anZ[i][0] != -1)
{
if (anZ[i][1] == 1)
{
anX[nItemsOfArrayX++] = anZ[i][0];
}
else
{
anY[nItemsOfArrayY++] = anZ[i][0];
}
}
}
}

/* In tung mang ra man hinh */
void printArray(int an[], int nLength)
{
for (int i = 0; i < nLength; i++)
{
if (an[i] != -1)
{
cout << an[i] << " ";
}
}

cout << "\n";
}

void main()
{
mergeArrays();
sortArray();
removeDupItems();
extractArray();
printArray(anX, nLengthX);
printArray(anY, nLengthY);

cin.get();
}

Em code bằng C++, bác hiểu được bao nhiêu hay bấy nhiêu, có lỗi gì thì em cũng chịu vì rảnh thì code chơi thôi :go:

quanghy
24-08-2011, 23:04
Nhập vào dữ liệu vào 2 mảng, xét từng mảng nếu có các phần tử trùng nhau thì xóa chúng đi tiếp theo xét 2 mảng a và b đó nếu có phần tử mảng này trùng phần tử mảng kia thì xóa chúng luôn.

//mình trình bày khó hiểu thế sao ? :sweat:

Cách của e cũng gần giống với các bác ở trên nhưng không có sắp xếp mảng.
Em viết mã giả bác cố hiểu nha:

Mảng A có n phần tử
Mảng B có m phần tử

//Xóa các phần tử trùng nhau của từng mảng (em chỉ ví dụ mảng A, mảng B tương tự)
Vòng for thứ 1 chạy từ i=0 đến i=n-2
Vòng for thứ 2 chạy từ j=i+1 đến j=n-1
Nếu A[i] = A[j] thì
Vòng for thứ 3 chạy từ k=j đến k=n-2
A[k] <- A[k+1]
n <- n-1
break

//Xóa phần tử mảng B nếu phần tử đó trùng với mảng A
Vòng for thứ 1 chạy từ i=0 đến i=m-1
Vòng for thứ 2 chạy từ j=0 đến j=n-1
Nếu B[i] = A[j] thì
Vòng for thứ 3 chạy từ k=i đến k=m-2
B[k] <- B[k+1]
m <- m-1
break

Note: vòng for tự hiểu là có ++ lên nha bác.
Tại "xóa phần tử" của bác e ko hiểu là xóa giá trị hay xóa cả phần tử (giảm tổng số lượng phần tử) nên "xóa phần tử" của e là gán nó giá trị bằng NULL.
E code giả chưa test nên ko bit thuật toán e đúng ko bác xem lại nhé :sexy:.

cal
26-08-2011, 22:19
Thông thường dạng bài này để rèn luyện vận dụng mảng, vòng lặp.

1 hướng giải quyết khác

A1. Xóa phần tử trùng trong 1 mảng: lần lượt theo các bước sau

- Tạo mảng phụ (dùng để đánh dấu những phần tử cần xóa), kích thước bằng mảng đang xét (mảng chính). Gán giá trị 0 cho tất cả phần tử trong mảng phụ.

- Duyệt mảng chính, phần tử nào cần xóa thì gán giá trị 1 vào phần tử tương ứng (cùng chỉ mục) trong mảng phụ.

- Duyệt mảng phụ (theo chiều ngược, từ chỉ mục lớn nhất đến chỉ mục 0), nếu gặp giá trị 1 thì xóa phần tử tương ứng trong mảng chính.

1 hướng giải quyết khác

A2. Xóa phần tử trùng trong 1 mảng

- Khai báo mảng kết quả, kích thước bằng mảng đang xét (mảng chính).

- Duyệt mảng chính để xác định các phần tử KHÔNG trùng. Mỗi khi tìm thấy 1 phần tử như vậy thì thêm nó vào mảng kết quả.

Vấn đề xóa phần tử trùng giửa 2 mảng cũng tương tự, vận dụng A1 hoặc A2 với 1 ít sửa đổi đều giải quyết được.

DQ.PhonG
29-08-2011, 17:27
Nhập vào dữ liệu vào 2 mảng, xét từng mảng nếu có các phần tử trùng nhau thì xóa chúng đi tiếp theo xét 2 mảng a và b đó nếu có phần tử mảng này trùng phần tử mảng kia thì xóa chúng luôn.

//mình trình bày khó hiểu thế sao ? :sweat:

vấn đề trình bày dễ hiểu, nhg yêu cầu của bài ko đơn giản. có nghĩa là sau khi xóa các phần tử trùng nhau của 1 mảng, vẫn phải kiểm tra các phần tử đã xóa đó có tồn tại ở bên phần tử 2 ko? nếu có thì xóa tiếp ở mảng 2. vậy nên công việc check trùng phần tử diễn ra 4 lần, và ngoài 2 mảng chính cần thêm 1 mảng nữa để lưu 1 phần tử đã xóa của mảng trước.:shame:

Linkin_Park
04-09-2011, 13:34
Tức là trùng nhau thì xóa luôn cả 2 thằng hay chỉ xóa 1 trong 2 thằng ? Nói ko rõ mà thấy mọi ng tư vấn nhiệt tình thật :rofl: .

xPE
04-09-2011, 14:26
Tức là trùng nhau thì xóa luôn cả 2 thằng hay chỉ xóa 1 trong 2 thằng ? Nói ko rõ mà thấy mọi ng tư vấn nhiệt tình thật :rofl: .
Đọc hết topic rồi hãy phát biểu bác ơi :sogood:

noobcsess
04-09-2011, 17:01
Tức là trùng nhau thì xóa luôn cả 2 thằng hay chỉ xóa 1 trong 2 thằng ? Nói ko rõ mà thấy mọi ng tư vấn nhiệt tình thật :rofl: .

Thôi đi hát tiếp đi bác ơi :rofl::lol:

quangbt2005
05-09-2011, 13:22
cái đề thế mà phức tạp thật :sweat:
học CNTT chi cho khổ thế ko bit

DQ.PhonG
06-09-2011, 15:46
cái đề thế mà phức tạp thật :sweat:
học CNTT chi cho khổ thế ko bit

cuộc sống còn nhiều cái phức tạp và khó khăn hơn nhiều... đọc đề thì là một chuyện, bắt tay vào làm mới là chuyện khác. :chaymau: