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

Đề tài: phân số ai cập

  1. #1
    Ngày gia nhập
    09 2011
    Nơi ở
    KCN Tiên Sơn , Bắc Ninh
    Bài viết
    1

    Wink phân số ai cập

    em có bài toán này các bác giúp em chỉ cần nêu thuật toán :
    lập trình nhập vào tử và mẫu số của một phân số rồi in ra cách biểu diễn phân số đó dưới dạng tổng của các phân số ai cập sao cho số lượng phân số ai cập là ít nhất
    VD :
    dữ liệu : aicap.inp
    dòng 1 : tử số
    dòng 2 : mẫu số
    kết quả : aicap.out
    in ra các phân số ai cập thỏa mãn thành từng dòng
    cảm ơn các bác nhiều lắm
    Học dốt C++ nhưng thích học C++

  2. #2
    Ngày gia nhập
    11 2011
    Nơi ở
    /home/tancuong
    Bài viết
    32

    Trích dẫn Nguyên bản được gửi bởi yeutin Xem bài viết
    em có bài toán này các bác giúp em chỉ cần nêu thuật toán :
    lập trình nhập vào tử và mẫu số của một phân số rồi in ra cách biểu diễn phân số đó dưới dạng tổng của các phân số ai cập sao cho số lượng phân số ai cập là ít nhất
    VD :
    dữ liệu : aicap.inp
    dòng 1 : tử số
    dòng 2 : mẫu số
    kết quả : aicap.out
    in ra các phân số ai cập thỏa mãn thành từng dòng
    cảm ơn các bác nhiều lắm
    Phân số ai cập có dạng như thế nào?

  3. #3
    Ngày gia nhập
    09 2011
    Nơi ở
    KCN Tiên Sơn , Bắc Ninh
    Bài viết
    1

    phân số ai cập là những phân số có tử số bằng 1, mẫu số là sô nguyên dương
    VD : 1/2
    1/6
    ...
    Học dốt C++ nhưng thích học C++

  4. #4
    Ngày gia nhập
    07 2011
    Bài viết
    160

    Bài này thì duyệt (brute-force search) thôi. Cho số thành phần chạy từ 1-> vô cùng, duyệt sao cho thành phần đầu tiên là thành phần lớn nhất. Rồi gọi đệ quy để duyệt thành phần tiếp theo
    Ví dụ với phân số 123/456, khi số thành phần là 3 thì bước đầu chỉ cần xét từ 1/4 -> 1/11 (vì 1/12 < 123/(456*3) )
    Trong trường hợp bước đầu chọn 1/8 chẳng hạn, thì tính 123/456 - 1/8 = 11/76. Lại duyệt tiếp với số thành phần (còn lại) = 2. Lần này chỉ phải duyệt từ 1/8 đến 1/13 (vì 1/14 < 11/(76*2) ). Không cần xét 1/7 vì 1/7 lớn hơn bước duyệt đầu
    Đến bước duyệt cuối mà mẫu số chia hết cho tử số là thành công.

    Ngoài ra nếu tử số lớn hơn mẫu số thì cần có xử lý riêng
    Đã được chỉnh sửa lần cuối bởi fbchicken : 06-11-2011 lúc 11:46 AM.

  5. #5
    Ngày gia nhập
    11 2011
    Nơi ở
    /home/tancuong
    Bài viết
    32

    Trích dẫn Nguyên bản được gửi bởi yeutin Xem bài viết
    phân số ai cập là những phân số có tử số bằng 1, mẫu số là sô nguyên dương
    VD : 1/2
    1/6
    ...
    C Code:
    1. #include <stdio.h>
    2. #include <conio.h>
    3.  
    4. int main (void)
    5. {
    6.     int t, m;
    7.     void expand(int, int);
    8.  
    9.     clrscr();
    10.     printf("Nhap tu mau: ");
    11.     scanf("%d%d", &t, &m);
    12.  
    13.     printf("%d/%d = ", t, m);
    14.  
    15.     expand(t, m);
    16.  
    17.     fflush(stdin);
    18.     getchar();
    19.  
    20.     return 0;
    21. }
    22.  
    23. void expand (int tu, int mau)
    24. {
    25.     int k;
    26.     if (mau % tu == 0)
    27.     {
    28.         printf("1/%d.", mau/tu);
    29.         return;
    30.     }
    31.  
    32.     for (k = tu; k && (mau % k); --k)
    33.     { }
    34.  
    35.     if (tu/mau == 1)
    36.         printf("1 + ");
    37.     else
    38.         printf("1/%d + ", mau/k);
    39.     expand(tu - k, mau);
    40. }

  6. #6
    Ngày gia nhập
    09 2011
    Nơi ở
    KCN Tiên Sơn , Bắc Ninh
    Bài viết
    1

    Mặc định phân số ai cập

    Code:
    for (k = tu; k && (mau % k); --k)
        { }
    dấu đóng mở ngoặc {} này nghĩa là thế nào vậy bác cuong ơi
    Học dốt C++ nhưng thích học C++

  7. #7
    Ngày gia nhập
    11 2011
    Nơi ở
    /home/tancuong
    Bài viết
    32

    Trích dẫn Nguyên bản được gửi bởi yeutin Xem bài viết
    Code:
    for (k = tu; k && (mau % k); --k)
        { }
    dấu đóng mở ngoặc {} này nghĩa là thế nào vậy bác cuong ơi
    dâu đóng mở ngoặc {} này để bao khối lệnh đấy. trong hàm int main() cũng có dấu đóng mởi ngoặc

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