Trang 1 trên tổng số 3 123 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 30 kết quả

Đề tài: Trộn 2 dãy nguyên tăng dần thành 1 dãy tăng dần

  1. #1
    Ngày gia nhập
    06 2007
    Nơi ở
    C:\WINDOWS\system32\dllcache\
    Bài viết
    3,007

    Mặc định Trộn 2 dãy nguyên tăng dần thành 1 dãy tăng dần

    Nhập 2 dãy nguyên (int) tăng dần a có n số và b có n số (0 < n, m ≤ 100). Trộn 2 dãy a, b thành dãy c có n+m số tăng dần (không sử dụng thao tác sắp xếp trên dãy c).

    yêu cầu :
    code chạy đúng : 7 điểm
    Kĩ năng cài đặt thuật toán 2 điểm
    Nếu thuật toán là đệ quy 1 điểm


    Cám ơn tất cả các bạn đã quan tâm đến bài viết này
    ^_,^

    Facebook : https://www.facebook.com/langmaninternet

    Bùi Tấn Quang

  2. #2
    Ngày gia nhập
    09 2009
    Nơi ở
    Hoa sơn tuyệt đỉnh
    Bài viết
    407

    bài của mình
    C++ Code:
    1. #include<iostream>
    2. using namespace std;
    3. int a[100],b[100],c[200];
    4. int n,m;
    5. void merge(int i,int j,int k)
    6. {
    7.      if (k<=n+m)
    8.      {
    9.         if (i==n)
    10.         {
    11.            c[k]=b[j];
    12.            merge(i,j+1,k+1);
    13.         }
    14.         else
    15.             if (j==m)
    16.             {
    17.                c[k]=a[i];
    18.                merge(i+1,j,k+1);
    19.             }
    20.             else
    21.             {
    22.                 if (a[i]<b[j])
    23.                 {
    24.                    c[k]=a[i];
    25.                    merge(i+1,j,k+1);
    26.                 }
    27.                 else
    28.                 {
    29.                     c[k]=b[j];
    30.                     merge(i,j+1,k+1);
    31.                 }
    32.             }
    33.      }
    34. }
    35. int main()
    36. {
    37.     srand(time(NULL));
    38.     cin>>n>>m;
    39.     for (int i=0;i<n;i++)
    40.         a[i]=rand()%50;
    41.     for (int i=0;i<m;i++)
    42.         b[i]=rand()%50;
    43.     sort(a,a+n);
    44.     sort(b,b+n);
    45.     for (int i=0;i<n;i++)cout<<a[i]<<" ";
    46.     cout<<endl;
    47.     for (int j=0;j<m;j++)cout<<b[j]<<" ";
    48.     cout<<endl;
    49.     merge(0,0,0);
    50.     for (int i=0;i<n+m;i++)
    51.     cout<<c[i]<<" ";
    52.     cout<<endl;
    53.     system("pause");
    54.     return 0;
    55. }

    my houses
    my school
    tỐnG lÊ cHâN mAnG kỶ nIệM bUồN cHo AnH...

  3. #3
    Ngày gia nhập
    06 2007
    Nơi ở
    C:\WINDOWS\system32\dllcache\
    Bài viết
    3,007

    hunterphu có thể cho thêm tớ code về chưa đệ quy ko
    code này nếu là bt thì cho 10
    nhưng cậu ở đội nên tớ chỉ cho 8 điểm thôi, để cậu còn update tiếp
    7 điểm chạy đúng và 1 điểm đệ quy

    (đừng giận tớ nhé, tớ chỉ muốn adv cho cậu thôi)
    ^_,^

    Facebook : https://www.facebook.com/langmaninternet

    Bùi Tấn Quang

  4. #4
    Ngày gia nhập
    09 2009
    Nơi ở
    Hoa sơn tuyệt đỉnh
    Bài viết
    407

    hì hì, mình thấy ko đệ qui thì gọn hơn á.
    Mình chỉ giận ... con gái thôi , hehe
    C++ Code:
    1. while (k<=n+m)
    2. {
    3.       if (i==n)
    4.          c[k++]=b[j++];
    5.       else
    6.           if (j==m)
    7.              c[k++]=a[i++];
    8.           else
    9.               if (a[i]<b[j])
    10.                  c[k++]=a[i++];
    11.               else
    12.                   c[k++]=b[j++];
    13. }

    my houses
    my school
    tỐnG lÊ cHâN mAnG kỶ nIệM bUồN cHo AnH...

  5. #5
    Ngày gia nhập
    06 2007
    Nơi ở
    C:\WINDOWS\system32\dllcache\
    Bài viết
    3,007

    Tớ chấm điểm kĩ thuật code cho cậu nhé : (cũng là adv cho cậu)


    + dùng biến toàn cục thường ko được điểm cao, tớ có đứa em học khoa học tự nhiên hà nội- toán tin, cũng hay code như thế. Biến toàn cục cậu chỉ nên dùng đối với ý nghĩa mang tính chương trình thôi
    ví dụ : các biến toàn cục thông dụng
    stdin
    stderr
    cerror
    cin
    cout
    ........
    ok?

    + Cách cài đặt hàm chưa ổn, hàm cậu làm ko sai, nhưng hàm là 1 đơn vị xử lý cơ bản, cậu nên chuyên biệt hóa các hàm, mỗi làm là 1 module cụ thể, tách biệt độc lập, có thể sử dụng lại qua nhiều bài toán khác nhau.

    void merge(int i,int j,int k)
    hàm này chưa được ở các yếu tố sau
    Không có tính độc lập, gắn kết với global variable. Như thế khi mang sang bài khác lại lôi theo global variable ??????

    Tham số+ định danh tham số chưa được. đầu vào của hàm này rất ko đạt, thường thì tham số của hàm thể hiện các dữ liệu đầu vào của hàm. vậy đầu vào ở đây là gì , trừu tượng quá.



    đề xuất
    ví dụ tớ có hàm như này
    PHP Code:
    void tron(int *a,int na,int *b,int nb,int *c,int &nc
    sẽ nhìn ra ngay
    2 tham số đầu là mảng a
    2 tham số tiếp theo là mảng b
    và theo logic tớ sẽ xếp 2 tham số tiếp theo là mảng c
    tuy dài hơn nhưng lại trong sáng , ok?????


    + Giải thuật hơi dài
    ^_,^

    Facebook : https://www.facebook.com/langmaninternet

    Bùi Tấn Quang

  6. #6
    Ngày gia nhập
    09 2009
    Nơi ở
    Hoa sơn tuyệt đỉnh
    Bài viết
    407

    Mặc định Trộn 2 dãy nguyên tăng dần thành 1 dãy tăng dần

    Thans bạn nhiều hén :d
    Đúng là mình làm các bài tập chỉ nhìn vào... đáp số.
    Mình học OPP cũng gần 1 năm rồi, nhưng mà vẫn... lười. Trước giờ khi làm một bài tập liên quan đến nhiều thuật toán nhỏ mình toàn coppy rồi paste, và phải sửa lại rất nhiều... :(
    => Cho nên đến giờ mình vẫn... không làm việc nhóm được :(

    my houses
    my school
    tỐnG lÊ cHâN mAnG kỶ nIệM bUồN cHo AnH...

  7. #7
    Ngày gia nhập
    06 2007
    Nơi ở
    C:\WINDOWS\system32\dllcache\
    Bài viết
    3,007

    Thật ra code của hunter hay, có kĩ năng lắm, để code luôn 1 đoạn code đệ quy như thế ko đơn giản chút nào cả. langman hiểu rõ mà
    nhưng còn thiếu chút kinh nghiệm nên langman mới tập trung nhấn mạnh vô những điểm chưa được để cậu hoàn thiện thôi


    Cho nên đến giờ mình vẫn... không làm việc nhóm được << muốn làm việc theo team thì cần có kinh nghiệm thực tế, chứ ko thể nào mà tự mình đọc sách vở đâu , nên cậu cứ bình tĩnh

    up up up : Mong chờ thêm 1 lời giải đệ quy từ các bạn

    cám ơn các bạn đã quan tâm đến topic này
    Đã được chỉnh sửa lần cuối bởi kitti : 21-03-2011 lúc 09:27 PM. Lý do: làm liền các bài viết spam
    ^_,^

    Facebook : https://www.facebook.com/langmaninternet

    Bùi Tấn Quang

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

    C++ Code:
    1. #include <iostream>
    2. using namespace std;
    3.  
    4. void merge( int arr1[], int nArr1, int arr2[], int nArr2, int *& arr3, int &nArr3 )
    5. {
    6.     int n1, n2, n3;
    7.    
    8.     n1 = n2 = n3 = 0;
    9.  
    10.     nArr3 = nArr1 + nArr2;
    11.     arr3  = new int [ nArr3 ];
    12.  
    13.     while( n1 < nArr1 && n2 < nArr2 )
    14.     {
    15.         if ( arr1[ n1 ] < arr2[ n2 ] )
    16.             arr3[ n3++ ] = arr1[ n1++ ];
    17.         else
    18.             arr3[ n3++ ] = arr2[ n2++ ];
    19.     }
    20.  
    21.     while( n1 < nArr1 )
    22.         arr3[ n3++ ] = arr1[ n1++ ];
    23.  
    24.     while( n2 < nArr2 )
    25.         arr3[ n3++ ] = arr2[ n2++ ];
    26. }
    27.  
    28. int main()
    29. {
    30.     int arr1[] = { 2, 4, 6, 6, 10 };
    31.     int nArr1  = sizeof( arr1 ) / sizeof( int );
    32.  
    33.     int arr2[] = { 1, 3, 7, 13, 21, 25, 91 };
    34.     int nArr2  = sizeof( arr2 ) / sizeof( int );
    35.    
    36.     int *arr3;
    37.     int nArr3;
    38.  
    39.     merge( arr1, nArr1, arr2, nArr2, arr3, nArr3 );
    40.  
    41.     for( int i = 0; i < nArr3; i++ )
    42.         cout << arr3[ i ] << "\t";
    43.  
    44.     cout << endl;
    45.  
    46.     delete [] arr3;
    47.  
    48.     return 0;
    49. }
    PS : Bài này là hồi trước tớ đọc bây giờ nhớ lại code thôi.

    Ui sorry langman tớ không nhìn thấy reply của bạn.

  9. #9
    Ngày gia nhập
    06 2007
    Nơi ở
    C:\WINDOWS\system32\dllcache\
    Bài viết
    3,007

    @pannaruto : tốt lắm
    theo đúng bảng điểm 9 điểm,
    nhưng tạm thời trừ 0.01 điểm vì title của hàm có đoạn
    PHP Code:
    int arr1[], int arr2[] 
    nên sửa thành int *arr1 cho gọn

    total : 8.99 điểm

    P/S : @all : cách của pannaruto là tư tưởng trộn 2 run tự nhiên, đây là 1 trong những kĩ thuật cũng hay được áp dụng, panaruto cài đặt khá tốt đó, các bạn nào chưa biết ý tưởng này thì nên theo dõi
    Đã được chỉnh sửa lần cuối bởi langman : 12-08-2010 lúc 01:45 AM. Lý do: Thêm p/s
    ^_,^

    Facebook : https://www.facebook.com/langmaninternet

    Bùi Tấn Quang

  10. #10
    Ngày gia nhập
    10 2009
    Nơi ở
    ThăngLong.delay(1000);
    Bài viết
    313

    cái bài trước ấy có 3 while, anh code có 1 while thế em bắt chước anh
    PHP Code:
    #include<iostream>
    using namespace std;
    void langman(int *a,int *b,int *c)
    {
        while (*
    a>=|| *b>=0)
        {
            if (*
    a<*&& *a>0) *c++=*a++;   
            else if(*
    b>0)  *c++=*b++; 
            else *
    c++=*a++;

        }
    }
    int main()
    {
        
    cout <<"Nhap vao hai day nguyen duong tang\n";
        
    int mni, *a, *b, *c;
        
    cin>>m>>n;
        
    a=new int[m+1];
        
    b=new int[n+1];
        
    c=new int[n+m];
        for (
    i=0i<mi++)
            
    cin >> a[i];
        for (
    i=0i<mi++)
            
    cin >> b[i];
        
    a[m]=-1;
        
    b[n]=-1;
        
    langman(a,b,c);
        for (
    i=0i<m+ni++)
            
    cout << c[i]<<" ";
        return 
    0;


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

  1. Bài tập C cho 1 số nguyên-> xuất số có thứ tự tăng dần
    Gửi bởi killervip0 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 16
    Bài viết cuối: 17-01-2012, 11:03 AM
  2. Sử dụng 4 hàng đợi để sắp xếp dãy số nguyên dương tăng dần
    Gửi bởi forever1992cm trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 0
    Bài viết cuối: 21-06-2011, 09:59 AM
  3. Lập trình C Sắp xếp 3 số nguyên theo thứ tự tăng dần
    Gửi bởi kendinh 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: 09-09-2010, 03:12 AM
  4. sắp xếp mảng số nguyên chẵn tăng dần, lẻ tăng dần, không dùng mảng tạm
    Gửi bởi hailoc12 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: 09-08-2006, 11:44 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