Từ 1 tới 9 trên tổng số 9 kết quả

Đề tài: Hỏi về kỹ thuật xóa

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

    Mặc định Hỏi về kỹ thuật xóa

    Cho 1 mảng,in ra các phần tử xuất hiện chỉ 1 lần trong mảng.
    Kỹ thuật xóa phần tử trùng nhau làm sao vậy mấy bạn?

  2. #2
    Ngày gia nhập
    07 2007
    Nơi ở
    Sơn La
    Bài viết
    133

    Có thể dùng:
    1. single linklist
    2. Sắp xếp lại rùi "dồn phần tử"
    Trao đổi kiến thức sẽ giúp ta tiếp cận nhanh với kiến thức.

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

    - Cái này khá đơn giản nên dùng mảng luôn cho nhanh...Try this!
    -Lưu ý: là phải sắp xếp mảng theo hướng tăng or giảm dần rồi mới sử dụng hàm này nhé bạn!
    C Code:
    1. //After Sort Array in Order
    2. void inRaCacSoXuatHienMotLan(int A[], int n)
    3. {
    4.     int dem = 1;//khoi gan so lan xuat hien cua 1 phantu trong mang
    5.     for(int i=0;i<n;i++)
    6.     {
    7.         if(A[i]==A[i-1])
    8.         {
    9.             dem = dem + 1;
    10.         }
    11.         else
    12.         {
    13.             dem = 1;// reset dem
    14.         }
    15.         if (dem==1&&A[i]!=A[i+1])
    16.         {
    17.             printf("%d ",A[i]);
    18.             dem = 1;// reset dem
    19.         }
    20.     }
    21. }
    Đã được chỉnh sửa lần cuối bởi hacker_mubaohiem : 27-03-2008 lúc 04:37 PM.
    No way, No success..

  4. #4
    Ngày gia nhập
    07 2007
    Nơi ở
    Sơn La
    Bài viết
    133

    Trích dẫn Nguyên bản được gửi bởi hacker_mubaohiem Xem bài viết
    C Code:
    1. for(int i=0;i<n;i++)
    2.     {
    3.         if(A[i]==A[i-1])
    4.         {
    5.             dem = dem + 1;
    6.         }
    7.         else
    8.         {
    9.             dem = 1;// reset dem
    10.         }
    11.         if (dem==1&&A[i]!=A[i+1])// Chỗ này nếu khi i=n-1 thì sao nhỉ? ^^
    12.         {
    13.             printf("%d ",A[i]);
    14.             dem = 1;// reset dem
    15.         }
    16.     }
    17. }
    Nói chung là không khó, bạn Taylaptrinh viết ra một ma trận.
    Rùi tìm xem quy luật nó như thế nào nhé.
    Trao đổi kiến thức sẽ giúp ta tiếp cận nhanh với kiến thức.

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

    Ơ,hình như mình hơi nhầm.Ý mình là xóa phần tử trùng nghĩa là thế này:
    Vd 56 76 48 -6 76 9 23 48
    Nếu như theo đoạn code của bạn thì nó sẽ xóa đi 76,48,nghĩa là không tồn tại trong mảng nữa.
    Ý mình là nó phải xuất ra thế này:
    56 76 48 -6 9 23
    sorry...

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

    Mặc định Hỏi về kỹ thuật xóa

    - Mình chỉ code cho bạn ý thứ nhất thôi...Mình đặt tên hàm sai...Sorry nhé! Mình đã sửa lại rồi!

    - Còn muốn xóa các phần tử trùng thì bạn làm thêm một hàm xóa phần tử mảng.Khi đếm mà >1 thì xóa liền ngay tại vị trí đó.

    @NT_OnlyLove : bạn đã test bài của mình chưa?Chạy hoàn toàn đúng nhé!.Còn về thắc mắc của bạn cũng đúng chứ ko sai: nghĩa là phần tử thứ N của mảng là 1 giá trị ko xác định trong bộ nhớ nên xác suất để A[n-1]==A[n] là rất thấp.Hầu như ko có!
    - Nhưng mà thôi muốn chắc ăn thì bạn đặt vô vị trí thứ N một thằng lính canh cho mình để ko sa bẫy là đc rồi!!!!
    Đã được chỉnh sửa lần cuối bởi hacker_mubaohiem : 27-03-2008 lúc 04:47 PM.
    No way, No success..

  7. #7
    Ngày gia nhập
    07 2007
    Nơi ở
    Sơn La
    Bài viết
    133

    @NT_OnlyLove : bạn đã test bài của mình chưa?Chạy hoàn toàn đúng nhé!.
    ^^ mình xem wa chứ không có test.
    Nếu khi bạn đã sắp xếp rùi thì không cần phải dùng đếm làm gì cho mệt và phức tạp.

    Code:
    if(Matrix[0] != Matrix[1]) cout<<Matrix[0];
    if(Matrix[max_Matrix -1 ] != Matrix[max_Matrix -2] cout<<Matrix[max_Matrix -1 ];
    for(int index=1;index < max_Matrix -1;index++)
    {
          if(Matrix[index -1] != Matrix[index] && Matrix[index] != Matrix[index +1])
                cout<<Matrix[index];
    }
    Cũng chưa có test , không bít có sai không nhỉ? ^^
    Trao đổi kiến thức sẽ giúp ta tiếp cận nhanh với kiến thức.

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

    đây là code anh em c việt đã hướng dẫn mình làm
    minh code lại hoàn chỉnh để bạn tham khảo
    nếu sai mọi người cùng góp ý nha
    code này dùng để sắp xếp mảng theo chiều tăng dần và xóa những phần tữ trùng nhau
    Code:
    #include <stdio.h>
    void XapMangTang(int a[],int n)
    {
    	int 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",a[i]);
    	}
    }
    void xoaPhanTuMang(int a[],int &n,int index)
    {
        for(int i = index;i<n-1;i++)
        {
            a[i] = a[i+1];
        }
        n = n - 1;
    }
    void xoaPhanTuTrungNhau(int a[], int n)
    {
        for(int i=1;i<n;i++)
            if(a[i]==a[i-1])
                xoaPhanTuMang(a,n,i);
    		for(int k=0;k<n;k++)
    			printf("  %d",a[k]);
    }
    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);
    	xoaPhanTuTrungNhau(a,n);
    }

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

    Trích dẫn Nguyên bản được gửi bởi #include# Xem bài viết
    đây là code anh em c việt đã hướng dẫn mình làm
    minh code lại hoàn chỉnh để bạn tham khảo
    nếu sai mọi người cùng góp ý nha
    code này dùng để sắp xếp mảng theo chiều tăng dần và xóa những phần tữ trùng nhau
    Code:
    #include <stdio.h>
    void XapMangTang(int a[],int n)
    {
    	int 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",a[i]);
    	}
    }
    void xoaPhanTuMang(int a[],int &n,int index)
    {
        for(int i = index;i<n-1;i++)
        {
            a[i] = a[i+1];
        }
        n = n - 1;
    }
    void xoaPhanTuTrungNhau(int a[], int n)
    {
        for(int i=1;i<n;i++)
            if(a[i]==a[i-1])
                xoaPhanTuMang(a,n,i);
    		for(int k=0;k<n;k++)
    			printf("  %d",a[k]);
    }
    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);
    	xoaPhanTuTrungNhau(a,n);
    }
    Thuật toán thì cũng hay đấy,nhưng có lỗi 1 số lỗi như sau
    _trong hàm main,bỏ phu[100].hok cần thiết.(chắc bạn này định làm mảng phụ )
    _Ngoài ra ,bạn còn sai 1 chỗ
    Vd như ta nhập mảng là 1,-2,6,-2,4,5,6,10,12,6
    Thì kết quả của bạn sẽ là....-2,1,4,5,6,6,10,12 nghĩa là vẫn còn 2 số trùng nhau..

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

  1. Xóa toàn bộ danh sách trong 2 struct. Xin gợi ý thuật toán?
    Gửi bởi duyanh_28 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 11
    Bài viết cuối: 12-08-2010, 10:36 PM
  2. Kỹ thuật Sprite Xóa Ảnh Thừa Trong Game
    Gửi bởi AlexF trong diễn đàn Tutorials và Thủ thuật Visual C++
    Trả lời: 0
    Bài viết cuối: 11-05-2010, 12:32 AM
  3. Cho mình thuật toán xóa data bằng file Txt
    Gửi bởi hackervn trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 2
    Bài viết cuối: 30-12-2008, 07:45 PM
  4. Kỹ thuật xóa phần tử trùng với
    Gửi bởi comeonbaby trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 4
    Bài viết cuối: 24-12-2007, 12:07 PM
  5. Kỹ thuật xóa node trên cây nhị phân
    Gửi bởi hiepsithong trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 5
    Bài viết cuối: 23-12-2006, 08:20 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