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

Đề tài: Kỹ thuật xóa phần tử trùng với

  1. #1
    Ngày gia nhập
    11 2007
    Bài viết
    153

    Wink Kỹ thuật xóa phần tử trùng với

    Mình có đề bài cho nhập 1 mảng sau đó xóa những số trùng nhau rồi in ra mảng không có số trùng nhưng không biết thuật toán, bạn nào biết xin chỉ giùm mình với mình xin cảm ơn rất nhiều^^!

  2. #2
    Ngày gia nhập
    12 2006
    Bài viết
    72

    Đơn giản nhất là bạn tạo ra một mảng mới, sau đó duyệt từ đầu đến cuối mảng gốc, tìm trong mảng mới đã có nó hay chưa, nếu chưa thì add nó vào mảng mới, nếu có rồi thì duyệt tiếp các phần tử tiếp theo của mảng cũ!
    Nếu muốn làm trên một mảng thì bạn dùng một vòng lặp duyệt từ đầu cho đến cuối, với mỗi vòng lặp lại duyệt từ vị trí đang xét lên trên đầu, nếu phần tử đang xét bằng với phần tử trước thì xóa nó đi (có thể xây dựng một hàm xóa với đối vào là một mảng và vị trí cần xóa, hoặc vị trí cần xoa (nếu mảng là một biến toàn cục))
    Chúc bạn thành công!

  3. #3
    Ngày gia nhập
    11 2007
    Bài viết
    47

    Một cách nữa:
    Bạn sắp xếp tăng dần hay nhỏ dần trước, sau đó duyệt. Bạn duyệt để tìm các đoạn [i,j] sao cho a[i] = a[i+1] = a[i+2] = ... = a[j] (j>i). Sau đó bạn tiến hành dồn mảng và giảm leng.

    Không thì làm như bạn thắng, dùng một mảng mới ép thêm phần tử vào

  4. #4
    Ngày gia nhập
    11 2007
    Bài viết
    153

    í mình cũng đã tính làm thêm 1 mảng rồi nhưng đề bài không cho, chỉ cho phép thao tác trên 1 mảng duy nhất thôi, bạn metal_shield có thể cho mình 1 đoạn code ví dụ và giải thích cho mình đc không??? mình chưa hiểu lắm về việc dồn mảng mặc dù có coi hướng dẫn, bạn thông cảm mình hơi ngu tí^^!

  5. #5
    Ngày gia nhập
    11 2007
    Bài viết
    47

    Trích dẫn Nguyên bản được gửi bởi comeonbaby Xem bài viết
    í mình cũng đã tính làm thêm 1 mảng rồi nhưng đề bài không cho, chỉ cho phép thao tác trên 1 mảng duy nhất thôi, bạn metal_shield có thể cho mình 1 đoạn code ví dụ và giải thích cho mình đc không??? mình chưa hiểu lắm về việc dồn mảng mặc dù có coi hướng dẫn, bạn thông cảm mình hơi ngu tí^^!
    //Đã sắp xếp xong mảng theo thứ tự tăng dần nhé, giả sử n là số phần tử của dãy

    Code:
    i = 0;
    while (i<n-1){
    	j = i;
    	while (a[j] == a[i] ) j++;//Loc ra day cac phan tu bang nhau tu i den j-1
    	if (j-1!=i){//Dồn mảng
    		for (int k=j; k<n; k++)
    			a[i+1+k-j] = a[k];
    			n = n- (j-i-1);//Giảm chiều dài tối đa của mảng
    	}
    	else i++;//Duyệt phần tử tiếp theo
    }
    Có chú thích đầy đủ, bài toán cũng khá đơn giản chắc bạn sẽ hiểu ngay thôi.

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

  1. 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
  2. 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
  3. sửa đoạn code xóa phần tử trùng
    Gửi bởi spacevak trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 4
    Bài viết cuối: 11-10-2010, 05:38 PM
  4. xóa phần tử trùng trong mảng?
    Gửi bởi Tiger_IT 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: 30-03-2010, 11:37 PM
  5. Xóa phần tử trùng của mảng rồi in ra mảng mới ko chứa phần tử trùng
    Gửi bởi bachkhoa9x trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 7
    Bài viết cuối: 20-07-2009, 09:29 AM

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