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
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 !
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
Nếu vậy thì bạn viết đệ quy như sau: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 !
C Code:
int BCNN(int a,int b) { static int i=1; if(a<b) { if(b%a==0) return b; else { i++; BCNN(a,b*i); } } else { if(a%b==0) return a; else { i++; BCNN(a*i,b); } } } }
được chưa Tủn ?PHP Code:int BCNN(int a,int b)
{
if(b%a == 0) return b;
return BCNN(a,b*2);
}
# 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.
Không biết ghi gì luôn ...
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 )
Test thử nhé:PHP Code:int BCNN(int a,int b)
{
int a1 = a/b; int b1 = a%b;
if(b%(a1) == 0) return b;
else { a = a1*(b+b1) + b1; b = b+b1 ; return BCNN(a,b); }
}
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 :
Nhưng sợ các cậu ko hiểu thôi ?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 = (a/b)*(b+(a%b)) + a/b; b = b+a%b ; return BCNN(a,b); }
}
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.
/*chuong trinh tim BCNN cua hai so bang de quy*/
Cách này được không bạn?C Code:
#include<stdio.h> #include<conio.h> #include<math.h> int UCLN(int a,int b); void main() { int a,b; getch(); } int UCLN(int a,int b) { if(b==0) return a; else return UCLN(b,a%b); }
Đã đượ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.
Đã được chỉnh sửa lần cuối bởi kscntt_46 : 21-04-2008 lúc 12:12 AM. Lý do: hix
>"<