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ố 14 kết quả

Đề tài: Xóa một vài phần tử của mảng trong lập trình C?

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

    Mặc định Xóa một vài phần tử của mảng trong lập trình C?

    Mình có một mảng thế này

    A =[1 5 5 7 8 9 9 ]

    Mình muốn bỏ đi hai phần tử 5 và 9 để tạo thành mảng
    B = [1 5 7 8 9]

    mọi người chỉ giúp.

  2. #2
    Ngày gia nhập
    09 2007
    Bài viết
    724

    Bước 1: kiếm các phần tử giống nhau
    Bước 2: xóa các phần tử đó đi.
    có thể làm theo 2 cách:
    cách 1: duyệt qua lưu lại một mảng --- xong xóa các phần tử đó đi cách chuối.
    cách 2: duyệt qua các phần tử, dùng một cái gì đó đã đánh dấu (dùng mảng phụ từ 0->max) để đánh dấu nó cho nhanh nếu thấy rồi thì del nó đi còn chưa thì bỏ qua.

    P/s: Cái này ít có tính giải thuật.
    Move xuống box hỏi đáp C.

  3. #3
    Ngày gia nhập
    11 2007
    Nơi ở
    Biết để làm gì?
    Bài viết
    827

    Buồn buồn code luôn
    C++ Code:
    1. #include <iostream>
    2. using namespace std;
    3. const int MAX=50;
    4.  
    5. void printArray(int arr[],int size)
    6. {
    7.     for (int i=0;i<size;i++)
    8.     {
    9.         cout<<arr[i]<<"\t";
    10.     }
    11. }
    12.  
    13. int main()
    14. {
    15.     int arr[MAX];
    16.     int size;
    17.     cout<<"Enter size of array : ";
    18.     cin>>size;
    19.     cout<<"\nEnter value of array : "<<endl;
    20.     for(int i=0;i<size;i++)
    21.     {
    22.         cout<<"arr["<<i<<"]:";
    23.         cin>>arr[i];
    24.         cout<<endl;
    25.     }
    26.     cout<<"\nArray before del : "<<endl;
    27.     printArray(arr,size);
    28.    
    29.         // cai doan nay la cho ban hoi day ne
    30.     int t,k;
    31.     for(int i=0;i<size;i++)
    32.     {
    33.         for(int j=i+1;j<size;j++)
    34.         {
    35.             if(arr[j]==arr[i])
    36.             {
    37.                 t=j+1;
    38.                 while(arr[t]==arr[j])
    39.                     t++;
    40.                 for(k=j;k<size;k++)
    41.                 {
    42.                     arr[k]=arr[k+t-j];
    43.                 }
    44.                 size=size-t+j;
    45.             }
    46.         }
    47.     }
    48.     cout<<"\nArray after del : "<<endl;
    49.     printArray(arr,size);
    50.     system("pause");
    51.     return 0;
    52. }
    Hix,code xong mới nhơ cậu hỏi trong box C :|
    Cánh Chym ứ mỏi

  4. #4
    Ngày gia nhập
    08 2008
    Nơi ở
    TP Hồ Chí Minh
    Bài viết
    28

    C Code:
    1. //Hàm Delete_k xóa phần tử tại vị trí k
    2. void Delete_k(int A[], int k, int &n) //k la vi tri phan tu can xoa
    3. {
    4.     for(int i = k; i < n-1; i++)
    5.         A[i] = A[i+1];
    6.     n--;
    7. }
    8.    
    9. //Hàm Find_k đi tìm vị trí cần xóa
    10. void Find_k(int A[], int &n) //n la so phan tu cua mang
    11. {
    12.     for(int i = 0; i < n-1; i++
    13.         for(int j = i+1; j < n; j++)
    14.             if(A[j] == A[i])
    15.             {
    16.                 Delete_k(A, j, n);
    17.                 j--;
    18.             }
    19. }
    IF YOU ARE ALONE , I'LL BE YOUR SHADOW
    IF YOU WANT TO CRY, I'LL BE YOUR SHOULDER
    IF YOU NEED HAPPY, I'LL BE YOUR SMILE
    BUT ANYTIME YOU NEED A FRIEND
    IT JUST BE ME !!!

  5. #5
    Ngày gia nhập
    11 2008
    Nơi ở
    Neverland
    Bài viết
    48

    C Code:
    1. #include <stdio.h>
    2. #include <conio.h>
    3. #define MAX 100
    4. int main() {
    5.     int n,i,j,k;
    6.     double a[MAX];
    7.     printf("Size of array:");
    8.     scanf("%d",&n);
    9.     printf("Input array:\n");
    10.     for (i=0;i<n;++i) {
    11.         printf("a[%d] = ",i+1);
    12.         scanf("%lf",&a[i]);
    13.     }
    14.     for (i=0;i<n-1;++i) {
    15.         for (j=i+1;j<n;++j)
    16.             if (a[j] == a[i]) {
    17.                 for (k=j;k<n-1;++k) a[k]=a[k+1];
    18.                 n--;   
    19.             }
    20.     }
    21.     printf("Array after delete duplicate number:");
    22.     for (i=0;i<n;++i)
    23.         printf("%8.3lf",a[i]);
    24.     getch();
    25.     return 0;
    26. }
    I'm superman

  6. #6
    Ngày gia nhập
    05 2010
    Bài viết
    38

    Mặc định Xóa một vài phần tử của mảng trong lập trình C?

    mình cũng không biết cách nào xóa một phần tử trong mảng,
    bạn có thể chỉ ra được phuơng pháp xóa phần tử trong mảng hay không ?

  7. #7
    Ngày gia nhập
    03 2010
    Nơi ở
    Sứ Lục Bắc Giang
    Bài viết
    24

    Có cách của bạn trung_dk070384 hay nhưng mà chưa tối ưu. Phải thêm edit lại code như thế này mới chuẩn

    C Code:
    1. #include <stdio.h>
    2. #include <conio.h>
    3. #define MAX 100
    4. int main() {
    5.     int n,i,j,k;
    6.     double a[MAX];
    7.     printf("Size of array:");
    8.     scanf("%d",&n);
    9.     printf("Input array:\n");
    10.     for (i=0;i<n;++i) {
    11.         printf("a[%d] = ",i+1);
    12.         scanf("%lf",&a[i]);
    13.     }
    14.     for (i=0;i<n-1;++i)
    15.     {
    16.         for (j=i+1;j<n;++j)
    17.             if (a[j] == a[i])
    18.             {
    19.                 for (k=j;k<n-1;++k)
    20.                      a[k]=a[k+1];
    21.                  a[n-1]=null;                
    22.                  n--;  
    23.                  j--;
    24.             }
    25.     }
    26.     printf("Array after delete duplicate number:");
    27.     for (i=0;i<n;++i)
    28.         printf("%8.3lf",a[i]);
    29.     getch();
    30.     return 0;
    31. }

  8. #8
    Ngày gia nhập
    10 2009
    Bài viết
    11

    theo mình không cần a[n-1]=NULL;
    vì khi đây không phải mà khai báo động lên khi khai bào double a[MAX]; thì nó đã tạo ra mảng gồm MAX phần tủ rùi
    gà thui có j mong bác thông cảm

  9. #9
    Ngày gia nhập
    05 2010
    Bài viết
    60

    Đây là cách của mình, thêm hai dòng này vào vòng lặp for lúc xuất ra mảng, ý tưởng là nếu gặp a[i]==a[i]+1 thì bỏ qua và tăng lên một ô nhớ
    PHP Code:
            if (a[i] != a[i+1])
            
    cout <<a[i]<<"   "
    Luôn luôn lắng nghe lâu lâu mới hiểu.

  10. #10
    Ngày gia nhập
    06 2011
    Nơi ở
    Vinh
    Bài viết
    4

    Trích dẫn Nguyên bản được gửi bởi googlebest Xem bài viết
    theo mình không cần a[n-1]=NULL;
    vì khi đây không phải mà khai báo động lên khi khai bào double a[MAX]; thì nó đã tạo ra mảng gồm MAX phần tủ rùi
    gà thui có j mong bác thông cảm
    nếu không làm như thế thì không đúng.
    Bạn thử mảng với các phần tử này xem: 1 2 3 3 2 0

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

  1. xóa các phần tử giống nhau trong mảng chỉ để lại 1 phần tử
    Gửi bởi trungbd trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 30
    Bài viết cuối: 12-08-2013, 04:01 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. Kỹ thuật C++0x Xóa không được 1 phần tử bất kì và xóa tại vị trí bất kì trong DSLK
    Gửi bởi datinh_o0o7 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: 19-03-2011, 10:24 PM
  4. Bài tập C++ xóa sinh viên trong dssv , ai test dùm em , xóa sv thứ 3 mà nó toàn xóa sv thứ 4
    Gửi bởi prt_awm 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: 08-11-2010, 02:24 PM
  5. Thuật toán trên C | Xóa phần tử trong dãy phần tử tăng dần?
    Gửi bởi quangphuit 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: 09-03-2010, 01:57 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