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

Đề tài: sắp xếp các phần tử tăng dần sau khi loại các phần tử trùng nhau

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

    Mặc định sắp xếp các phần tử tăng dần sau khi loại các phần tử trùng nhau

    mình mới đang học C nên chưa biết nhiều.Mình có bài sau, mong các bạn giúp mình

    nhập vào n phần tử thực, sắp xếp các phần tử tăng dần sau khi loại các phần tử trùng nhau
    thank
    Đường đời vô tận, đường học vô biên

  2. #2
    Ngày gia nhập
    09 2006
    Nơi ở
    /usr/share/.hack@
    Bài viết
    1,433

    Sử dụng menu Tìm Kiếm ở trên á :|
    None!

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

    Đây là code loại bỏ phần tử trùng lặp:
    C Code:
    1. #include <stdio.h>
    2. #include <conio.h>
    3.  
    4. int n,i,j,a[100];
    5.  
    6. int laplai(int k)
    7. //tim xem phan tu thu k lap lai phan tu nao
    8. {
    9.     for(i=0;i<k;++i)
    10.     if(a[i]==a[k]) return(i);
    11.     return -1;
    12. }
    13.  
    14. void nhap()
    15. //nhap cac phan tu va loai trung lap
    16. {
    17.     for(i=0;i<n;++i)
    18.     {
    19.         scanf("%d",&a[i]);
    20.         if(laplai(i)>=0)
    21.         {
    22.             n--;
    23.             i--;//nhap lai a[i]
    24.         }
    25.     }
    26. }
    27.  
    28. void main()
    29. {
    30.     clrscr();
    31.     printf("Nhap so phan tu: ");
    32.     scanf("%d",&n);
    33.     printf("Nhap %d phan tu:\n",n);
    34.     nhap();
    35.     printf("Sau khi loc:");
    36.     for(i=0;i<n;++i)
    37.         printf(" %d",a[i]);
    38.     getch();
    39. }

    Mà tại sao lại loại bỏ rồi mới sắp xếp, sắp xếp xong lọai bỏ thì hợp lý hơn chứ, sau khi sắp xếp, các phần tử trùng lặp nằm cạnh nhau, ta chỉ việc duyệt từ đầu đến cuối, thàng cu nào = thằng đứng trước nó thì xóa đi.
    Xóa thì làm thế này:
    C Code:
    1. void xoa(int k)
    2. {
    3.     n--;
    4.     for(int i=k;i<n;++i)
    5.         a[i]=a[i+1];   
    6. }

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

    thank các bạn nha

    Trích dẫn Nguyên bản được gửi bởi regist Xem bài viết
    Đây là code loại bỏ phần tử trùng lặp:
    C Code:
    1. #include <stdio.h>
    2. #include <conio.h>
    3.  
    4. int n,i,j,a[100];
    5.  
    6. int laplai(int k)
    7. //tim xem phan tu thu k lap lai phan tu nao
    8. {
    9.     for(i=0;i<k;++i)
    10.     if(a[i]==a[k]) return(i);
    11.     return -1;
    12. }
    13. void nhap()
    14. //nhap cac phan tu va loai trung lap
    15. {
    16.     for(i=0;i<n;++i)
    17.     {
    18.         scanf("%d",&a[i]);
    19.         if(laplai(i)>=0)
    20.         {
    21.             n--;
    22.             i--;//nhap lai a[i]
    23.         }
    24.     }
    25. }
    26.  
    27. void main()
    28. {
    29.     clrscr();
    30.     printf("Nhap so phan tu: ");
    31.     scanf("%d",&n);
    32.     printf("Nhap %d phan tu:\n",n);
    33.     nhap();
    34.     printf("Sau khi loc:");
    35.     for(i=0;i<n;++i)
    36.         printf(" %d",a[i]);
    37.     getch();
    38. }

    Mà tại sao lại loại bỏ rồi mới sắp xếp, sắp xếp xong lọai bỏ thì hợp lý hơn chứ, sau khi sắp xếp, các phần tử trùng lặp nằm cạnh nhau, ta chỉ việc duyệt từ đầu đến cuối, thàng cu nào = thằng đứng trước nó thì xóa đi.
    Xóa thì làm thế này:
    C Code:
    1. void xoa(int k)
    2. {
    3.     n--;
    4.     for(int i=k;i<n;++i)
    5.         a[i]=a[i+1];   
    6. }
    bạn ơi cho mình hỏi lại, sao trong hàm laplai lại có 2 câu lệnh return,
    Đã được chỉnh sửa lần cuối bởi langman : 13-03-2009 lúc 10:01 AM.
    Đường đời vô tận, đường học vô biên

  5. #5
    Ngày gia nhập
    02 2008
    Nơi ở
    Việt Nam
    Bài viết
    577

    bạn ơi cho mình hỏi lại, sao trong hàm laplai lại có 2 câu lệnh return,
    Nếu kiểm tra thấy == tức là lặp lại thì return vị trí lặp, còn hết quá trình kiểm tra không xay ra thì trả về -1

    Bạn cố gắng hình dung một chút rùi sẽ hiểu.

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

  1. Lập trình C | Sắp xếp và loại bỏ các phần tử trùng nhau trên mảng?
    Gửi bởi sonas trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 14
    Bài viết cuối: 22-06-2012, 09:34 AM
  2. Viết CT sắp xếp một mảng theo thứ tự tăng dần sau khi đã loại bỏ các phần trùng nhau??
    Gửi bởi justc trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 3
    Bài viết cuối: 03-03-2011, 09:17 AM
  3. 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
  4. Bài tập C sắp xếp mảng tăng dần, loại phần tử trùng nhau
    Gửi bởi matmeocham trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 8
    Bài viết cuối: 20-11-2010, 12:35 PM
  5. Bài tập C++ Sắp xếp mảng sau khi đã loại bỏ những phần tử trùng nhau
    Gửi bởi tuanvu_n trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 19
    Bài viết cuối: 29-06-2010, 08:23 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