Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 16 kết quả

Đề tài: xóa phần tử trùng nhau của mang?

  1. #1
    Ngày gia nhập
    03 2008
    Bài viết
    126

    Mặc định xóa phần tử trùng nhau của mang?

    trước khi post câu hỏi này mình đã serch trên diễn đan nhưng vẫn thấy không hiểu lắm các bạn giúp mình nha
    mình có 1 bài tập là sắp xếp các phần tử trùng nhau trong mảng 1 chiều các số nguyên
    mình đã code sắp xếp các phần tữ theo kiểu tăng dần
    nhưng ko biết làm sao để xóa các phần tữ trung nhau
    vd mảng có các phần tữ là: 1 3 6 6 7 9 9
    làm sao săp dc la: 1 3 6 7 9 là dc
    đây là code của mình
    Code:
    #include <stdio.h>
    void XapMangTang(int a[],int n)
    {
    	float temp;
    	for(int i=0;i<n;i++)
    	{
    		for(int j=i;j<n;j++)
    			if(a[i]>a[j])
    			{
    				temp=a[i];
    				a[i]=a[j];
    				a[j]=temp;
    			}
    			printf(" %d\n",a[i]);
    	}
    }
    void main()
    {
    	int a[100],n,phu[100];
    	printf("Moi ban nhap so phan tu cua mang: ");
    	scanf("%d",&n);
    	for(int i=0;i<n;i++)
    	{
    		printf("Nhap a[%d]: ",i);
    		scanf("%d",&a[i]);
    	}
    	XapMangTang(a,n);
    }

  2. #2
    Ngày gia nhập
    03 2008
    Nơi ở
    TP HCM
    Bài viết
    30

    Thì cũng như bạn đã làm là sắp xếp mảng tăng đó.Nếu 2 phần tử liền kề giống nhau(a[i] == a[j]) thì bạn xóa thì 1 phần tử của mảng(tức là dồn mảng lại và mảng giảm đi 1 (n--) ) .Chúc bạn may mắn.

  3. #3
    Ngày gia nhập
    03 2008
    Bài viết
    126

    mình hok hiểu ý bạn
    bạn code xem thủ dc khong
    mình ko hình dung dc xóa như thế nào

  4. #4
    Ngày gia nhập
    10 2006
    Bài viết
    107

    Hix, tui trả lời cho ông rồi đây thây, bài này post lên đây làm gì. Chịu khó viết đi cha nội T_T.
    Nói là một chuyện, làm là một chuyện. Chi bằng ta làm xong rồi hãy nói như vậy thì nói và làm sẽ là một chuyện.

  5. #5
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    delete
    - before : [1][2][3][4][2] : size = 5;
    - after : [1][3][4][2] : size = 4; (A[0].A[1] = A[2], A[2] = A[3], A[3] = A[4] )
    good enough ?

  6. #6
    Ngày gia nhập
    12 2007
    Bài viết
    224

    Mặc định xóa phần tử trùng nhau của mang?

    Trước hết phải tìm ra phần tử mà có phần tử khác giống nó . Sau đó xoá hết các phần tử ấy.

  7. #7
    Ngày gia nhập
    03 2008
    Bài viết
    78

    Ý tưởng cũng tốt rùi...thử code bạn tham khảo xem sao???

    C Code:
    1. void xoaPhanTuMang(int A[],int &N, int index)
    2. {
    3.     for(int i = index,i<N-1,i--) //index la vi tri can phai xoa
    4.     {
    5.         A[i] = A[i+1]; //don phan tu sau vi tri index ve truoc
    6.     }
    7.     N = N - 1; //kich thuoc mang con lai
    8. }
    C Code:
    1. //Sau khi da sap xep
    2. void xoaPhanTuTrungNhau(int A[], int N)
    3. {
    4.     for(int i=1;i<N;i++)
    5.     {
    6.         if(A[i]==A[i-1])
    7.         {
    8.             xoaPhanTuMang(A,N,i);
    9.         }
    10.     }
    11. }
    No way, No success..

  8. #8
    Ngày gia nhập
    04 2008
    Bài viết
    1

    Các bạn tranh giành nhau làm gì. Các bạn làm gì mà phức tạp thế. Các bạn biết xoá ký tự trùng nhau trong một chuỗi chưa. Ở đây cũng thế. Mình chỉ cần dùng 2 lệnh for thôi mà nếu các phần tử sau mà giống phần tử trước thì gán chúng chỉ số =0, đồng thời ta giảm index đi mà. Ta chỉ cần hiện ra các phần tử có nhãn =1 thôi.
    Có thế thôi mà.

  9. #9
    Ngày gia nhập
    03 2008
    Bài viết
    126

    cảm ơn hacker nhiều nha
    Code:
    for(int i = index,i<N-1,i--)
    đoạn code này của bạn mình nghĩ là sai
    mình sữa lại là
    Code:
    for(int i = index,i<N-1,i++)
    Đã được chỉnh sửa lần cuối bởi #include# : 06-04-2008 lúc 12:12 AM.

  10. #10
    Ngày gia nhập
    03 2008
    Nơi ở
    TP HCM
    Bài viết
    30

    Trích dẫn Nguyên bản được gửi bởi hacker_mubaohiem Xem bài viết
    Ý tưởng cũng tốt rùi...thử code bạn tham khảo xem sao???

    C Code:
    1. void xoaPhanTuMang(int A[],int &N, int index)
    2. {
    3.     for(int i = index,i<N-1,i--) //index la vi tri can phai xoa
    4.     {
    5.         A[i] = A[i+1]; //don phan tu sau vi tri index ve truoc
    6.     }
    7.     N = N - 1; //kich thuoc mang con lai
    8. }
    C Code:
    1. //Sau khi da sap xep
    2. void xoaPhanTuTrungNhau(int A[], int N)
    3. {
    4.     for(int i=1;i<N;i++)
    5.     {
    6.         if(A[i]==A[i-1])
    7.         {
    8.             xoaPhanTuMang(A,N,i);
    9.         }
    10.     }
    11. }
    Theo mình nếu bạn xoá các phần từ trùng nhau thì bạn nên cho i chạy bắt đầu từ cuối mảng.Như thế sẽ không bị xót khi xóa!
    Đã được chỉnh sửa lần cuối bởi nhocxinh : 07-04-2008 lúc 09:02 PM.

Các đề tài tương tự

  1. ADO.NET Lọc và xóa những rows trùng nhau trên datagridview
    Gửi bởi bearmen trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 11
    Bài viết cuối: 17-06-2016, 10:15 PM
  2. Mảng trên C Bài toán xóa phần tử trùng nhau
    Gửi bởi hjepsjga_94 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 4
    Bài viết cuối: 07-07-2013, 04:06 PM
  3. Bài tập C++ Cách xóa các ký trùng nhau trong xâu (How to remove duplicate characters in string)
    Gửi bởi mr.cuong_tq trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 3
    Bài viết cuối: 22-04-2012, 10:53 AM
  4. Bài tập C xóa phần tử trùng nhau trong mảng 1 chiều để lại 1 phần tử
    Gửi bởi ronoa trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 2
    Bài viết cuối: 06-01-2012, 10:46 PM
  5. Thủ tục loại bỏ các phần tử trùng nhau, giữ lại duy nhất 1 phần tử trong DSLK
    Gửi bởi mrtyoffline trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 02-03-2011, 10:27 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn