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

Đề tài: xóa phần tử là số chính phương trong mảng 1 chiều. Xem giúp code của mình với?

  1. #1
    Ngày gia nhập
    07 2011
    Bài viết
    22

    Exclamation xóa phần tử là số chính phương trong mảng 1 chiều. Xem giúp code của mình với?

    nhờ các bạn xem giúp coded mình như sau:
    C Code:
    1. void xoacp(int *a,int *n)
    2. {
    3.     if(*n<0 || *n>size)
    4.         printf("Khong hop le\n");
    5.     else if(*n==0)
    6.         printf("Mang rong\n");
    7.     else
    8.     {
    9.         for(int i=0;i<*n;i++)
    10.         {   if(cp(a[i]))           
    11.                 a[i]=a[i+1];
    12.             (*n)--;
    13.         }
    14.            
    15.                
    16.        
    17.     }  
    18. }

  2. #2
    Ngày gia nhập
    04 2010
    Bài viết
    1,534

    Trích dẫn Nguyên bản được gửi bởi loveboom3012 Xem bài viết
    nhờ các bạn xem giúp coded mình như sau:
    C Code:
    1. void xoacp(int *a,int *n)
    2. {
    3.     if(*n<0 || *n>size) // size là biến toàn cục hoặc là macro
    4.         printf("Khong hop le\n");
    5.     else if(*n==0)
    6.         printf("Mang rong\n");
    7.     else
    8.     {
    9.         for(int i=0;i<*n;i++)
    10.         {   if(cp(a[i]))           
    11.                 a[i]=a[i+1]; // chỉ copy như vầy không đủ
    12.                                                // phải dùng 1 vòng lặp để dồn pt mảng
    13.             (*n)--; // cái này phải bỏ vào đk if
    14.                                   // nếu không mảng sẽ bị ngắn đi phân nửa
    15.         }
    16.            
    17.                
    18.        
    19.     }  
    20. }
    Sai ở chỗ chú thích

  3. #3
    Ngày gia nhập
    07 2011
    Bài viết
    22

    Trích dẫn Nguyên bản được gửi bởi VoTichSu Xem bài viết
    Sai ở chỗ chú thích đỏ
    "dùng một dòng for để dồn phần tử mãng nữa là sao bạn? mình vẫn còn chưa hiểu?

  4. #4
    Ngày gia nhập
    12 2010
    Bài viết
    19

    Trích dẫn Nguyên bản được gửi bởi loveboom3012 Xem bài viết
    "dùng một dòng for để dồn phần tử mãng nữa là sao bạn? mình vẫn còn chưa hiểu?
    thế này nè bạn:

    C Code:
    1. void xoacp(int *a,int *n)
    2. {
    3.     if(*n<0 || *n>size)
    4.         printf("Khong hop le\n");
    5.     else if(*n==0)
    6.         printf("Mang rong\n");
    7.     else
    8.     {
    9.         for(int i=0;i<*n;i++) // gia su mang la 2 4 5 6
    10.         {   if(cp(a[i])) // a[1] la so cp          
    11.                 a[i]=a[i+1]; // a[1] = a[2] -> mag la 2 5 5 6
    12.             (*n)--; // n = 3
    13.         }
    14.            
    15.                
    16.        
    17.     }  
    18. }

    bạn thấy đc chổ sai chưa , phải dùng dòng for để dồn các phần tử phía sau về trước 1 vị trí;
    sửa lại là:

    C Code:
    1. void xoacp(int *a,int *n)
    2. {
    3.     if(*n<0 || *n>size)
    4.         printf("Khong hop le\n");
    5.     else if(*n==0)
    6.         printf("Mang rong\n");
    7.     else
    8.     {
    9.         for(int i=0;i<*n;i++)
    10.         {   if(cp(a[i]))
    11.             for(int j =i; j <n -1;j++)
    12.                 a[j]=a[j+1];
    13.  
    14.             (*n)--;
    15.         }
    16.            
    17.                
    18.        
    19.     }  
    20. }

  5. #5
    Ngày gia nhập
    07 2011
    Bài viết
    22

    Trích dẫn Nguyên bản được gửi bởi satthuvotinh Xem bài viết
    thế này nè bạn:

    bạn thấy đc chổ sai chưa , phải dùng dòng for để dồn các phần tử phía sau về trước 1 vị trí;
    sửa lại là:
    Bạn ơi ,mình hỏi ngu xíu nha ,tại sao chỗ
    Code:
    for(j=i;j<*n-1;j++)
    mà không phải là j<*n vậy?
    thank ban nhieu !!!!!!!!!!!!!!
    Đã được chỉnh sửa lần cuối bởi loveboom3012 : 23-08-2011 lúc 05:53 PM.

  6. #6
    Ngày gia nhập
    07 2011
    Bài viết
    160

    Post xóa phần tử là số chính phương trong mảng 1 chiều. Xem giúp code của mình với?

    Trích dẫn Nguyên bản được gửi bởi loveboom3012 Xem bài viết
    nhờ các bạn xem giúp coded mình như sau:
    Bạn có thể viết như sau thì sẽ tránh được vấn đề phải dồn mảng sau mỗi thao tác xóa:

    C++ Code:
    1. void xoacp(int *a,int *n)
    2. {
    3.     int n2 = 0;
    4.  
    5.     if(*n<0 || *n>size)
    6.         printf("Khong hop le\n");
    7.     else if(*n==0)
    8.         printf("Mang rong\n");
    9.     else
    10.     {
    11.         for(int i=0;i<*n;i++)
    12.             if(!cp(a[i])) a[n2++] = a[i];
    13.         *n = n2;
    14.     }  
    15. }

    Nếu cần tối ưu nữa thì có thể dùng con trỏ để loại bỏ sử dụng chỉ số mảng (cách viết này hơi khó nhìn với người chưa quen, nhưng lại rất hợp với phong cách iterator của C++).
    C Code:
    1. void xoacp(int *a,int *n)
    2. {
    3.     //.. Kiểm tra n hợp lệ
    4.     int *an = a + *n, *p2 = a;
    5.     for (; a != an; ++a)
    6.         if (!cp(*a)) *p2++ = *a;
    7.     *n -= (an - p2);
    8. }

    Ý tưởng gốc, nói 1 cách dễ hiểu, là chọn lọc những phần tử không phải số cp đưa vào 1 mảng mới b, rồi copy về a. Nhưng ở đây ta không dùng mảng mới mà đưa trực tiếp vào mảng a luôn cũng không sao cả.

    Trích dẫn Nguyên bản được gửi bởi loveboom3012 Xem bài viết
    ... tại sao chỗ
    Code:
    for(j=i;j<*n-1;j++)
    mà không phải là j<*n vậy?
    thank ban nhieu !!!!!!!!!!!!!!
    Trả lời giùm luôn: Vì bạn ý dồn a[j] = a[j + 1] nên phải j < *n - 1, nếu không khi j == *n-1 thì j + 1 sẽ bị tràn (j + 1 == *n, và không ai đảm bảo a[*n] là nằm trong phạm vi cho phép)
    Đã được chỉnh sửa lần cuối bởi fbchicken : 23-08-2011 lúc 07:21 PM.

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

  1. Bài tập C xóa,thêm phần tử trong mảng 1 chiều
    Gửi bởi gacongnghe trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 6
    Bài viết cuối: 26-09-2015, 01:44 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. Algorithm Chuyển code tính tổng các phần tử dương trong mảng 1 chiều sang đệ quy giúp em với !
    Gửi bởi hocphp_1998 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 11
    Bài viết cuối: 10-04-2011, 11:31 PM
  4. code xóa node trong danh sách liên kết. giúp sửa
    Gửi bởi vanmeo trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 13
    Bài viết cuối: 12-07-2010, 02:21 PM
  5. Code C, xóa các phần tử có giá trị bằng x trong mảng|sai chổ nào giúp em với?
    Gửi bởi bethaophuong2004 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 4
    Bài viết cuối: 03-04-2009, 11:14 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