Công cụ bảo vệ mã nguồn .NET mạnh nhất, không thể unpack, miễn phí cho các khách hàng đầu tiên đăng ký.
Từ 1 tới 3 trên tổng số 3 kết quả

Đề tài: Giải đệ quy quay lui đơn giản cho những ai mới học

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

    Mặc định Giải đệ quy quay lui đơn giản cho những ai mới học

    đề bài là : xét xem 1 số có phải là số thuộc dãy fibonacci hay không và phân tích nó dưới dạng tổng của các số fibonacci
    bài này đơn giản với những người học lâu rồi nên các bạn đừng cười nhé
    ai mới học thì xem qua cho biết nhé , vì nó dễ hiểu hơn mấy bài kiểu 8 quân hậu
    viết bằng c và sử dụng devc++
    C++ Code:
    1. //phan  tich duoi dang tong cua cac so fibonacci co the trung nhau
    2. #include<stdio.h>
    3. #include<conio.h>
    4. int k,a[90],s,n,b[90];
    5. void xetfibo(int p)
    6. {
    7.     int t=2;
    8.     n=2;
    9.     b[0]=1;
    10.     b[1]=1;
    11.     while ((b[t-1]+b[t-2])<=p)
    12.     {b[t]=b[t-1]+b[t-2];
    13.     t++;
    14.     n++;}
    15. }
    16. void inkq(int x)
    17.  
    18. {    int j;
    19.      printf("\n%d = %d ",k,a[1]);
    20.      for(j=2;j<x;j++)
    21.      printf("+ %d ",a[j]);
    22. }
    23. void tim(int i)
    24. {    int j;
    25.      if(s==k)
    26.      inkq(i);
    27.      else
    28.      for(j=1;j<=k;j++)
    29.      {                    xetfibo(j);
    30.                           if(b[n-1]==j)
    31.                          if(s+j<=k&&j>=a[i-1])//phan tich duoi dang cac so fibonacci khong trung nhau thi j>a[i-1]
    32.                          {
    33.                                               s=s+j;
    34.                                              
    35.                                               a[i]=j;
    36.                                               tim(i+1);
    37.                                               s=s-j;
    38.                          }
    39.      }
    40. }
    41. int main()
    42. {
    43.  
    44.     printf("nhap k= ");
    45.     scanf("%d",&k);
    46.     xetfibo(k);
    47.     if(b[n-1]==k)
    48.     {            printf("%d la so thuoc day fibonacci ",k);
    49.                  
    50.     }
    51.     else
    52.     printf("%d khong thuoc day fibonacci",k);
    53.     a[0]=s=0;
    54.     tim(1);
    55.     getch();
    56.     return 0;
    57. }

    Lưu ý cho code vào thẻ
    Công cụ bảo vệ mã nguồn .NET mạnh nhất hiện tại, miễn phí cho các khách hàng đầu tiên đăng ký.
    Đã được chỉnh sửa lần cuối bởi rox_rook : 21-08-2008 lúc 06:34 AM.
    Em có thấy nắng vàng kỷ niệm
    Hạ ngồi ru thanh thản những môi cười
    Thuở ngồi ngóng tay choàng tay nỗi nhớ
    Vin tay vào tháng năm chơi vơi...

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

    Mặc định dãy số Kanto vô hạn

    cảm bạn nhiều! ai có bài dãy số Kanto vô hạn không post lên tham khảo với nha!

    Đề nè, mọi người tham khảo, mình có đáp án rồi nhưng của thầy, hic ... khó quá

    Người ta xây dựng một dãy Kanto vô hạn K = k0, K1, K2, … , Kn như sau:
    - Ban đầu viết dãy con gồm 1 ký tự a: K0 = a
    - Ở mỗi bước i tiếp theo dãy, dãy Ki được tạo lập bằng cách thay đồng thời trong dãy Ki-1 mọi xuất hiện của a bởi dãy aba và mọi xuất hiện của b trong dãy bởi bbb.
    Ví dụ:
    K0 = a
    K1 = aba
    K2 = ababbbaba
    K3 = ababbbababbbbbbbbbababbbaba
    Viết chương trình xác định giá trị phần từ thứ kn trong dãy Kanto trên.
    char Xacdinh(int n)
    n = 0 thì kn = a
    n = 4 thì kn = b
    n = 18 thì kn = a

  3. #3
    Ngày gia nhập
    12 2009
    Nơi ở
    The country of happiness
    Bài viết
    182

    Mặc định Lời giải dãy số Kanto vô hạn

    search google về đệ quy mình thấy lại topic này từ năm ngoái. Mạn phép đưa lên lời giải cho bài dãy số Kanto vì mình thấy nó rất thú vị.

    C++ Code:
    1. /*
    2. Người ta xây dựng một dãy Kanto vô hạn K = k0, K1, K2, … , Kn như sau:
    3. - Ban đầu viết dãy con gồm 1 ký tự a: K0 = a
    4. - Ở mỗi bước i tiếp theo dãy, dãy Ki được tạo lập bằng cách thay đồng thời trong dãy Ki-1 mọi xuất hiện của a bởi dãy aba và mọi xuất hiện của b trong dãy bởi bbb.
    5. Ví dụ:
    6. K0 = a
    7. K1 = aba
    8. K2 = ababbbaba
    9. K3 = ababbbababbbbbbbbbababbbaba
    10. Viết chương trình xác định giá trị phần từ thứ kn trong dãy Kanto trên.
    11.  
    12. [COLOR="Red"]Lưu ý  rằng đánh số phần tử thứ kn bắt đầu từ  1[/COLOR]
    13. char Xacdinh(int n)
    14. n = [COLOR="Red"]1 [/COLOR]  thì kn = a
    15. n = 4  thì kn = b
    16. n = 18 thì kn =[COLOR="Red"] b[/COLOR]
    17. */
    18.  
    19. #include<iostream>
    20. #include<vector>
    21. #include<string>
    22. using namespace std;
    23.  
    24. /**
    25. *  vector K là mảng các string K trong bài
    26. **/
    27. vector<string> K;
    28.  
    29.  
    30. /**
    31. * Hàm determine xác định kí tự được sinh ra bởi x và thứ tự của nó. VD : xâu "aba" được sinh ra từ 'a',  
    32. nên determine( 'a',0 ) = determine( 'a' , 2) = 'a' và determine( 'a' , 1 ) = 'b'
    33. **/
    34. char determine(char x, int y)
    35. {
    36.     if(x == 'a')
    37.     {
    38.         if(y == 0 || y == 2) return 'a';
    39.         else return 'b';
    40.     }
    41.     else
    42.     {
    43.         return 'b';    
    44.     }
    45. }
    46.  
    47. /**
    48. * Hàm run_r trả về kí tự thứ numberChar của xâu thứ numberK. Chẳng hạn kí tự thứ 2 của xâu thứ 2 là 'b'
    49. **/
    50. char run_r(int numberK, int numberChar)
    51. {
    52.    
    53.     if(numberK == 1 && (numberChar == 1 || numberChar == 3)) return 'a';
    54.     if(numberK == 1 && numberChar == 2) return 'b';
    55.     int r = numberChar%3;
    56.     int m = numberChar/3;
    57.     if(r == 0)return determine(run_r(numberK-1,m),r);
    58.     if(r > 0)
    59.     {
    60.         m++;
    61.         r--;
    62.         return determine(run_r(numberK-1,m),r);
    63.        
    64.     }  
    65. }
    66.  
    67. char xacdinh(int n)
    68. {
    69.     return run_r(n,n);
    70. }
    71.  
    72. int main()
    73. {
    74.     int n;
    75.     cout << "enter n : ";
    76.     cin >> n;
    77.     cout << xacdinh(n) << endl;
    78.     return 0;
    79. }
    Công cụ bảo vệ mã nguồn .NET mạnh nhất hiện tại, miễn phí cho các khách hàng đầu tiên đăng ký.
    Đã được chỉnh sửa lần cuối bởi tiendaotd : 24-02-2011 lúc 03:09 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