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

Đề tài: Tìm BCNN bằng đệ quy ?

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

    Mặc định Tìm BCNN bằng đệ quy ?

    Cho 2 số a và b . Viết hàm tìm đệ quy BCNN của a và b.
    Với bài trên thì em viết được nếu thêm 1 biến phụ là c chẳng hạn.
    Nhưng đề bài bắt yêu cầu không dùng biến phụ và viết theo mẫu
    int BCNN (int a , int b)
    {
    ....
    }

    Còn cách tìm bội chung nhỏ nhất của 2 số
    Ví dụ : Cho số 4 và số 5
    Ta lấy số lớn hơn là 5 + 5 = 10
    Nếu chưa mod hết cho 4 thì tiếp tục +
    10 + 5 = 15 ( vẫn chưa được )
    15 + 5 = 20 (được rồi ^_^) thì kết quả là 20
    Mong các anh chị giải đáp cho em !

  2. #2
    Ngày gia nhập
    01 2008
    Nơi ở
    Rất nhiều sóng gió
    Bài viết
    447

    Bài này theo mình nghĩ có thể đưa về giải bằng UCLN

    BCNN(a,b) = a*b / UCLN(a,b)
    UCLN(a,b) = UCLN(b,a)
    UCLN(a,b) = b nếu a = 0
    UCLN(a,b) = UCLN(a, a%b) nếu a > b

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

    Trích dẫn Nguyên bản được gửi bởi Ada Xem bài viết
    Bài này theo mình nghĩ có thể đưa về giải bằng UCLN

    BCNN(a,b) = a*b / UCLN(a,b)
    UCLN(a,b) = UCLN(b,a)
    UCLN(a,b) = b nếu a = 0
    UCLN(a,b) = UCLN(a, a%b) nếu a > b
    Cách trên mình biết rồi nhưng ở đây là áp dụng cách mình nêu ví dụ ở trên

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

    Còn cách tìm bội chung nhỏ nhất của 2 số
    Ví dụ : Cho số 4 và số 5
    Ta lấy số lớn hơn là 5 + 5 = 10
    Nếu chưa mod hết cho 4 thì tiếp tục +
    10 + 5 = 15 ( vẫn chưa được )
    15 + 5 = 20 (được rồi ^_^) thì kết quả là 20
    Mong các anh chị giải đáp cho em !
    Nếu vậy thì bạn viết đệ quy như sau:

    C Code:
    1. int BCNN(int a,int b)
    2. {
    3.  static int i=1;
    4.  if(a<b)
    5.  {
    6.   if(b%a==0) return b;
    7.   else {
    8.          i++;
    9.          BCNN(a,b*i);
    10.         }
    11.  }
    12.  else
    13.  {
    14.   if(a%b==0) return a;
    15.   else {
    16.          i++;
    17.          BCNN(a*i,b);
    18.         }
    19.   }
    20. }
    21. }

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

    Trích dẫn Nguyên bản được gửi bởi sieuphuong Xem bài viết
    Nếu vậy thì bạn viết đệ quy như sau:

    C Code:
    1. int BCNN(int a,int b)
    2. {
    3.  static int i=1;
    4.  if(a<b)
    5.  {
    6.   if(b%a==0) return b;
    7.   else {
    8.          i++;
    9.          BCNN(a,b*i);
    10.         }
    11.  }
    12.  else
    13.  {
    14.   if(a%b==0) return a;
    15.   else {
    16.          i++;
    17.          BCNN(a*i,b);
    18.         }
    19.   }
    20. }
    21. }
    Sai rồi anh ơi ,anh có thể kiểm tra lại , anh có thể viết mà không cần dùng thêm biến phụ không ?

  6. #6
    Ngày gia nhập
    10 2006
    Nơi ở
    In Your Bugs
    Bài viết
    823

    Mặc định Tìm BCNN bằng đệ quy ?

    PHP Code:
    int BCNN(int a,int b)
    {
       if(
    b%== 0) return b;
       return 
    BCNN(a,b*2);

    được chưa Tủn ?

    # Hix. Viết chưa tối ưu lắm. Ku Tủn coi lại và sửa thử xem sao ? Ý của cậu mà.
    Đã được chỉnh sửa lần cuối bởi kidkid : 19-04-2008 lúc 09:31 AM.

  7. #7
    Ngày gia nhập
    10 2007
    Nơi ở
    Gameloft studio
    Bài viết
    175

    Trích dẫn Nguyên bản được gửi bởi kidkid Xem bài viết
    PHP Code:
    int BCNN(int a,int b)
    {
       if(
    b%== 0) return b;
       return 
    BCNN(a,b*2);

    được chưa Tủn ?

    # Hix. Viết chưa tối ưu lắm. Ku Tủn coi lại và sửa thử xem sao ? Ý của cậu mà.
    nếu thế thì kidkid chạy tay thế này thử đúng ko?
    -a=3,b=4;
    -qua hàm, b>a -> gọi hàm với a=3,b=8
    - 8%3-> chưa đúng, gọi tiếp hàm với a=3, b=16;
    -> sai rùi, b=12 mới chính xác.
    Hihihihi, bài này có lẽ hơi căng đó kidkid
    Không biết ghi gì luôn ...

  8. #8
    Ngày gia nhập
    10 2006
    Nơi ở
    In Your Bugs
    Bài viết
    823

    Không cho dùng biến tạm. SH có ý gì ko ?

    Tớ có ý thế này, bằng cách tùy biến các con số, tuy ko hay nhưng tạm giải quyết được cái đã (Hết tiền net rồi nè ..)

    Bây giờ, cũng hàm trên, nhưng a,b không phải là a,b như người ta nhập nữa. VD:
    a=3,b=4 thì :
    Main: Kiểm tra a,b thỏa đk chưa nếu chưa : a = a*(b+b) + b, b = b+b; sau đó gọi BCNN(int,int)
    lúc này: a/b = a (ban đầu), a%b = b (ban đầu )
    PHP Code:
    int BCNN(int a,int b

       
    int a1 a/bint b1 a%b;
       if(
    b%(a1) == 0) return b
       else { 
    a1*(b+b1) + b1b+b1 ; return BCNN(a,b); }

    Test thử nhé:
    a=3,b=4:
    b%a != 0 -> a= 3*(4+4) + 4 =28, b= 8;
    BCNN 1:
    a1 = 28/8 = 3; b1 = 28%8 = 4;
    b%a1 == 8%3 != 0;
    a = a1*(b+b) + b1 = 3*(8+4) + 4 = 40; b = 8+4 = 12;
    BCNN 2:
    a1 = 40/12 = 3; b1 = 40%12 = 4;
    b%a1 = 12%3 == 0 return b;

    Hieubm nói là còn biến tạm, a1,và b1, cái này thì chưa hẳn, có thể viết lại thế này :

    PHP Code:
    int BCNN(int a,int b

       
    //int a1 = a/b; int b1 = a%b;
       
    if(b%(a/b) == 0) return b
       else { 
    = (a/b)*(b+(a%b)) + a/bb+a%; return BCNN(a,b); }

    Nhưng sợ các cậu ko hiểu thôi ?

    Biếng thật, tí tôi về tôi viết thử? Hi vọng tối thảo luận tiếp. Chờ SH và ANIT
    Đã được chỉnh sửa lần cuối bởi kidkid : 19-04-2008 lúc 10:31 AM.

  9. #9
    Ngày gia nhập
    04 2008
    Bài viết
    4

    /*chuong trinh tim BCNN cua hai so bang de quy*/
    C Code:
    1. #include<stdio.h>
    2. #include<conio.h>
    3. #include<math.h>
    4. int UCLN(int a,int b);
    5. void main()
    6. {
    7.    
    8.     int a,b;
    9.     printf("nhap vao 2 so a va b:\n");
    10.     scanf("%d%d",&a,&b);
    11.     printf("BCNN cua %d va %d la:%d",a,b,(a*b)/UCLN(a,b));
    12.     getch();
    13.  
    14. }
    15. int UCLN(int a,int b)
    16. {
    17.    
    18.     a=abs(a);b=abs(b);
    19.     if(b==0)
    20.         return a;
    21.     else
    22.         return UCLN(b,a%b);
    23.    
    24.  
    25. }
    Cách này được không bạn?
    Đã được chỉnh sửa lần cuối bởi Forlorn_hope : 20-04-2008 lúc 08:57 PM. Lý do: đặt code vào tag đi bạn.

  10. #10
    Ngày gia nhập
    04 2007
    Nơi ở
    Bà Trưng quê ở Mê Linh
    Bài viết
    29

    Trích dẫn Nguyên bản được gửi bởi kidkid Xem bài viết

    Nhưng sợ các cậu ko hiểu thôi ?
    Code:
    else { a = (a/b)*(b+(a%b)) + a/b; b = b+a%b ; return BCNN(a,b);
    Nhưng mình thấy bạn hướng dẫn nó có vẻ rất trừu tượng và code rất ngắn. Mình đang test bài theo ý tưởng của Kidkid rùi.
    Ok ! Giờ em đã hiểu, cứ tưởng sai. Thuật toán lạ quá.
    Đã được chỉnh sửa lần cuối bởi kscntt_46 : 21-04-2008 lúc 12:12 AM. Lý do: hix
    >"<

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

  1. Tìm ƯCLN & BCNN của số tự nhiên
    Gửi bởi vanhan611 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 26
    Bài viết cuối: 11-10-2012, 11:52 PM
  2. Bài tập C Tìm UCLN và BCNN của n số nguyên dương.
    Gửi bởi conrongchautien 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: 24-05-2011, 01:27 PM
  3. Kỹ thuật C++ Tính BCNN rồi tìm UCLN như thế nào???
    Gửi bởi BlackDiam0nd trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 17
    Bài viết cuối: 21-12-2010, 08:05 AM
  4. Sửa giúp code Tìm BCNN của dãy số
    Gửi bởi mori trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 2
    Bài viết cuối: 19-03-2009, 12:24 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