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

Đề tài: Đệ quy - Liệt kê dãy nhị phân chiều dài n

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

    Mặc định Đệ quy - Liệt kê dãy nhị phân chiều dài n

    đề tài : liệt kê dãy nhị phân chiều dài n
    em có bài giải này :
    C++ Code:
    1. #include<iostream.h>
    2. #include<conio.h>
    3. #include<iomanip.h>
    4. int x[1000];
    5. int m,dem=0;
    6. void xuat();
    7. void duyetnhiphan(int i);
    8. void main()
    9. {   clrscr();
    10.     cout<<"nhap m=  ";
    11.     cin>>m;
    12.     duyetnhiphan(1);
    13.     getch();
    14. }
    15. void xuat()
    16. {   int i;
    17.     cout<<++dem<<setw(4);
    18.     for(i=1;i<=m;i++)
    19.    cout<<x[i]<<setw(4);
    20.     cout<<endl;
    21. }
    22. void duyetnhiphan(int i)
    23. {  for(int j=0;j<=1;j++)
    24.     {x[i]=j;
    25.     if(i==m)
    26.     xuat();
    27.     else
    28.     duyetnhiphan(i+1);
    29.     }
    30. }
    no' cho kết quả
    Output Code:
    1. 1   0   0   0
    2. 2   0   0   1
    3. 3   0   1   0  
    4. 4   0   1   1
    5. 5   1   0   0
    6. 6   1   0   1
    7. 7   1   1   0
    8. 8   1   1   1

    thầy chỉ như sau:
    đầu tiên duyetnhiiphan(1)
    x[1]=0
    x[2]=0
    x[3]=0
    i==m xuất ra 0 0 0
    do đệ quy hoạt động theo cơ chế stack
    nên típ theo x[3]=1
    i==m xuất ra 0 0 1
    tưởng hỉu rùi ai ngờ vìa nhà xem lai ko bít bước tip' theo giải thich' sao nữa
    mấy anh chi giup dùm

  2. #2
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    Bài này đúng mà, đâu có sai gì đâu nhỉ, mình đọc giải thuật bạn rùi, chỉ có cái khởi tạo mãng theo kiểu pascal index 1 hơi ngượng 1 tí thôi, bắt đầu từ index 0 cũng chẳng sao hết.
    Output Code:
    1. 1   0   0   0
    2. 2   0   0   1
    3. 3   0   1   0  
    4. 4   0   1   1
    5. 5   1   0   0
    6. 6   1   0   1
    7. 7   1   1   0
    8. 8   1   1   1
    Kết quả không hề sai. À quên nữa, đây là C++ not C, phân biệt cho rõ ràng.
    Viết theo C++ phải dùng int main, include <iostream> , kiểu #include <iostream.h> outdated lâu rùi, không nên có biến là global, tập pass vào hàm cho quen. Global scope là rất tồi.

    C++ Code:
    1. #include <iostream>
    2. #include <iomanip>
    3.  
    4. using namespace std;
    5.  
    6. void print(int arr[], int arrSize)
    7. {
    8.   for(int x = 0; x < arrSize; ++x){  
    9.     cout << arr[x] << setw(3);
    10.   }
    11.   cout << "\n--------------------\n";
    12. }
    13.  
    14. void backtrack(int arr[], int position, int arrSize)
    15. {
    16.   for(int mElem = 0; mElem <= 1; ++mElem){
    17.     arr[position] = mElem;
    18.     if(position == arrSize - 1){        
    19.       print(arr, arrSize);
    20.     }
    21.     else{        
    22.       backtrack(arr, position + 1, arrSize);
    23.     }
    24.   }
    25. }
    26.  
    27. int main()
    28. {
    29.   const int arrSize = 100;
    30.   int A[arrSize] = {0};
    31.   int elem;
    32.   cout << "Elements generate : ";
    33.   cin >> elem;
    34.   backtrack (A, 0, elem);
    35.   return 0;
    36. }
    Chắc nhờ ai move sang box C++ T_T!

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

    biết là đúng nhưng mà em cần hỏi theo cách của em thì đến đó giải thích ra sao cơ em làm đồ án mà nên cần giải thích cơ (theo bài và theo cách em đang giải thích đó huhuhu giúp dùm em cái)

  4. #4
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    biết là đúng nhưng mà em cần hỏi theo cách của em thì đến đó giải thích ra sao cơ em làm đồ án mà nên cần giải thích cơ (theo bài và theo cách em đang giải thích đó huhuhu giúp dùm em cái)
    Em cần giải thích cái gì ?
    i==m xuất ra 0 0 1
    tưởng hỉu rùi ai ngờ vìa nhà xem lai ko bít bước tip' theo giải thich' sao nữa
    mấy anh chi giup dùm
    Ý tưởng chính của bài này là : cách sinh ra 1 dãy nhị phân là ta gặp số 0 thì gán = 1 chuyển tất cả các phần tử bên phải số đó = 0 cho tới khi toàn dãy = 1. Sách giải thuật của tác giả Lê Minh Hoàng giải thích bài này rất hay.
    PHP Code:
    int main()
    {
    nếu lười

         
    thì vào box giải thuật down về mà đọc;
    }
    nếu siêng 
    {
         
    Vẽ cái cây ramỗi nhánh là các bước lặp của đệ quiphải suy nghĩ còn không thì làm sao giải thích lại cho thầy ?
    Cái ý tưởng anh nêu rõ rồi đólấy 1 tờ giấy trắngchạy tay với n 3post lên anh xem ;) anh sẽ giải thích tiếp ;
    }
    return 
    0;


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

    đâu có lười đâu anh tại mới học mà ông thầy em theo tiêu chí tự học là chính hix . phần trên em nghe đến đó vìa nhà coi lai bước típ theo :
    theo cơ chế stack thì tip theo x[2]=1 .tại sao nó ko len tới x[3]=1 rui i=m mới xuất mà lại xuất ra luôn 0 1 0 tai sao ko là 0 1 1

  6. #6
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    Mặc định Đệ quy - Liệt kê dãy nhị phân chiều dài n

    PHP Code:
    void backtrack(int arr[], int positionint arrSize)
    {
      for(
    int mElem 0mElem <= 1; ++mElem){
        
    arr[position] = mElem;
        if(
    position == arrSize 1){        
          print(
    arrarrSize);
        }
        else{        
          
    backtrack(arrposition 1arrSize);
        }
      }

    Em lấy 1 tờ giấy 1 cây viết ra, chạy tay cho anh là hiểu, hiểu sâu nữa là, tập chạy tay cho quen . Em hiểu cách hàm hoạt động thì mỗi lần gặp lại hàm đó ( đệ qui ) em ghi nó ra đề vào level 1, tiếp thì level 2, chú ý thật kĩ giá trị của vòng lặp for, học 1 bài thật chắc thì mấy bài sau cũng sẽ không phải mệt nữa. Cứ tập trung chạy tay trước đi.
    mới xuất mà lại xuất ra luôn 0 1 0 tai sao ko là 0 1 1
    Tại vị thứ tự nó gọi là vậy !

  7. #7
    Ngày gia nhập
    02 2008
    Nơi ở
    thành phố hồ chí minh
    Bài viết
    7

    anh rook ơi cho em hỏi câu lệnh :
    using namespace std;
    hàm int main()
    có tác dụng gì vậy anh
    câu lệnh return 0; trong thân hàm int main() nghĩa là sao vậy anh

  8. #8
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    PHP Code:
    using namespace std
    Dùng để sử dụng các thư viện chuẩn của C++ thay vì
    std::cout << thì có thể dùng cout << , std::cin >> có thể dùng cin >>.
    Program nhỏ thì ok, viết program lớn thì không nên dùng using namespace std, dễ conflict với các namespace khác.
    PHP Code:
     int main() 
    main cũng là hàm, int là kiểu trả về, kiểu trả về của main là 0 vậy thôi. Nhưng đa số complier sau này có hay không có return 0, nó vẫn tự động trả về 0, bỏ vào cũng không sao.
    void main() đã bỏ từ lâu rồi, khoảng từ năm 2000. Chuẩn của C++ bắt buộc phải dùng int main().

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

  1. Trả lời: 2
    Bài viết cuối: 21-04-2013, 09:46 AM
  2. Lỗi: bố cục trang web tự tăng theo chiều ngang khi chiều cao thay đổi
    Gửi bởi tuanngocpt trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 2
    Bài viết cuối: 16-03-2013, 11:25 PM
  3. Trả lời: 1
    Bài viết cuối: 28-04-2012, 09:43 PM
  4. Cách truyền mang 1 chiều cho hàm bài con trỏ và mảng một chiều ai có thể giải thích giúp mình
    Gửi bởi biencute 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: 21-03-2012, 09:00 AM
  5. Lời giải bài tập: Chuỗi Ký tự, mảng số nguyên 1 chiều, mảng 2 chiều, tạo Menu
    Gửi bởi xuanngoc trong diễn đàn Thủ thuật, Tutorials và Mã nguồn C/C++/C++0x
    Trả lời: 0
    Bài viết cuối: 15-10-2011, 01:17 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