Trang 1/2 12 cuối
kết quả từ 1 tới 12 trên 13

Hỏi bài: Chia bánh sinh nhật

  1. #1
    Ðến Từ
    TP. Hồ Chí Minh
    Thành Viên Thứ: 402126
    Giới tính: Nữ
    Bài gửi
    38

    Question Hỏi bài: Chia bánh sinh nhật

    Em mới học C++ được vài tháng. Có vài bài mong được mọi người chỉ giúp.

    1) Mẹ của Hồng và Hà dự định tổ chức sinh nhật cho hai chị em sinh đôi này bằng cách làm hai chiếc bánh sinh nhật hình tròn giống nhau. Tuy nhiên, nhà chỉ có mỗi một cái bàn hình tam giác. Em hãy lập trình giúp bà ấy tìm bán kính lớn nhất của mỗi chiếc bánh sao cho hai chiếc bánh đều nằm hoàn toàn trên mặt bàn và không được chồng lên nhau.

    Dữ liệu vào từ bàn phím 3 số nguyên dương a, b, c là 3 cạnh của cái bàn hình tam giác bất kì với:
    0 < a, b, c < 10^9
    a < b + c
    b < a + c
    c < a + b

    Kết quả in ra màn hình 1 số thực là bán kính lớn nhất của chiếc bánh sinh nhật. Kết quả được làm tròn 3 chữ số thập phân.

    Ví dụ:
    Nhập vào: a = 5, b = 12, c = 13
    In ra: 1.529

    Hình ảnh chỉ mang tính chất minh họa, kết quả có thể không phải lớn nhất.

    Ai giúp em với. Em cám ơn nhiều.
    Quick reply to this message Trả lời       

  2. #2
    Ðến Từ
    TP. Hồ Chí Minh
    Thành Viên Thứ: 402126
    Giới tính: Nữ
    Bài gửi
    38

    Reply: Hỏi bài: Chia bánh sinh nhật

    Cao thủ nào giúp em bài này với ạ!

  3. #3
    Ðến Từ
    Thái Bình
    Thành Viên Thứ: 263160
    Giới tính: Nữ
    Bài gửi
    1.071

    Reply: Hỏi bài: Chia bánh sinh nhật

    2 hình tròn bằng nhau, cùng bán kính R như hình: 2 hình tròn nằm dọc theo cạnh dài nhất của tam giác.
    Dùng cách dựng hình và hình học phẳng, lượng giác, tìm ra công thức tính R từ a,b,c.
    Đưa công thức đã tìm ở trên vào phần lập trình, in ra kết quả
    Hết
    Cách xoá virus, malware, tự nhảy quảng cáo trên trình duyệt máy tính
    http://vforum.vn/diendan/showthread.php?119711

  4. #4
    Ðến Từ
    Bình Định
    Thành Viên Thứ: 219047
    Giới tính: Nam
    Bài gửi
    1.249

    Reply: Hỏi bài: Chia bánh sinh nhật

    Trích Nguyên văn bởi Em yêu Vforum Xem bài viết
    2 Dùng cách dựng hình và hình học phẳng, lượng giác, tìm ra công thức tính R từ a,b,c.

    Hết
    Mấu chốt là làm thế nào để tìm ra công thức. Nói v thì ai nói chả được

  5. #5
    Ðến Từ
    Thái Bình
    Thành Viên Thứ: 263160
    Giới tính: Nữ
    Bài gửi
    1.071

    Reply: Hỏi bài: Chia bánh sinh nhật

    Trích Nguyên văn bởi aloxinh_nb Xem bài viết
    Mấu chốt là làm thế nào để tìm ra công thức. Nói v thì ai nói chả được
    Chém trước như thế, chắc chắn k sai. Mình đang ngâm cứu để ra được công thức đây

  6. #6
    Ðến Từ
    Bình Định
    Thành Viên Thứ: 219047
    Giới tính: Nam
    Bài gửi
    1.249

    Reply: Hỏi bài: Chia bánh sinh nhật

    Trích Nguyên văn bởi Em yêu Vforum Xem bài viết
    Chém trước như thế, chắc chắn k sai. Mình đang ngâm cứu để ra được công thức đây

  7. #7
    Ðến Từ
    TP. Hồ Chí Minh
    Thành Viên Thứ: 402126
    Giới tính: Nữ
    Bài gửi
    38

    Reply: Hỏi bài: Chia bánh sinh nhật

    Em cũng biết đại khái thế, nhưng quan trọng là làm thế nào? Công thức đâu? Làm sao bạn biết phải nằm dọc theo cạnh dài nhất?

  8. #8
    Ðến Từ
    Bình Định
    Thành Viên Thứ: 219047
    Giới tính: Nam
    Bài gửi
    1.249

    Reply: Hỏi bài: Chia bánh sinh nhật

    Trích Nguyên văn bởi LanSG9x Xem bài viết
    Em cũng biết đại khái thế, nhưng quan trọng là làm thế nào? Công thức đâu? Làm sao bạn biết phải nằm dọc theo cạnh dài nhất?
    Thế cái ví dụ kia làm sao tính ra thế @@. Hay đề nó ghi v

  9. #9
    Ðến Từ
    TP. Hồ Chí Minh
    Thành Viên Thứ: 402126
    Giới tính: Nữ
    Bài gửi
    38

    Reply: Hỏi bài: Chia bánh sinh nhật

    Trích Nguyên văn bởi aloxinh_nb Xem bài viết
    Thế cái ví dụ kia làm sao tính ra thế @@. Hay đề nó ghi v
    Dạ là đề cho anh ạ. Mà em làm được nếu nó là tam giác vuông thôi.

  10. #10
    Ðến Từ
    TP. Hồ Chí Minh
    Thành Viên Thứ: 56897
    Giới tính: Nam
    Bài gửi
    881

    Cool Reply: Hỏi bài: Chia bánh sinh nhật

    Bài này có nhiều cách làm. Bạn thử cái này xem nhé.

    Nhận xét:

    Để 2 đường tròn thỏa mãn tính chất bài toán thì:
    a) 2 đường tròn phải tiếp xúc nhau và tiếp xúc với các cạnh của tam giác.
    b) Sẽ có 1 cạnh của tam giác phải tiếp xúc với cả 2 đường tròn. 2 cạnh còn lại chỉ tiếp xúc với 1 đường tròn.
    c) Tâm của mỗi đường tròn phải nằm trên đường thẳng nối giữa tâm của đường tròn nội tiếp và 1 trong 3 đỉnh của tam giác.

    Không mất tính tổng quát, giả sử 2 đường tròn cần tìm tiếp xúc với cạnh a của tam giác ABC như trong hình vẽ.

    Gọi:
    - r là bán kinh của bánh sinh nhật lớn nhất cần tìm (đường tròn nhỏ).
    - R là bán kính của đường tròn nội tiếp tam giác ABC.
    - p là nửa chu vi của tam giác ABC, tức là p = (a + b + c) / 2.
    Mã:
    1/R = sqrt( p / ((p-a)(p-b)(p-c)) ).
    Tại sao?

    Nếu A là diện tích của tam giác thì
    - Ta dễ dàng thấy: A = p*R.
    - Công thức Heron về diện tích tam giác: A = sqrt( p(p-a)(p-b)(p-c) ).


    Gọi u, v, x, y là độ dài các cạnh theo như hình vẽ. Theo hệ quả của định lý Thales, ta có:
    Mã:
    u/x = r/R và v/y = r/R.

    Mã:
    a = u + 2r + v = (x/R)*r + 2r + (y/R)*r = (2 + a/R) * r,
    ta có công thức tìm r như sau:
    Mã:
    r = a/(2 + a/R),
    với 1/R được tính như trên. Đây chính là công thức cần tìm.

    Điểm cuối cùng: a phải là cạnh nào?
    Trả lời: a phải là cạnh dài nhất theo như công thức của r (got it?)

    Code như sau:
    Mã:
    // nhập a, b, c kiểu double.
        
    double p = (a + b + c) / 2,
           inv_R = sqrt(p / (p - a) / (p - b) / (p - c));
        
    a = max(a, b < c ? c : b);
    printf("%.3f\n", a / (2 + a * inv_R));

    Good luck.
    LCD: 13.3" 1920x1080 IPS
    CPU: Intel i7 - 4700MQ (2.4 GHz - 3.4 GHz)
    GPU: Nvidia GTX 765m with GDDR5 2GB
    RAM: 2x8GB G.Skill 2133
    HDD: Samsung SSD 850 Pro 512 GB
    2 kg.

  11. Đã cảm ơn tengiday:


  12. #11
    Ðến Từ
    Bình Định
    Thành Viên Thứ: 219047
    Giới tính: Nam
    Bài gửi
    1.249

    Reply: Hỏi bài: Chia bánh sinh nhật

    Mã:
    #include<math.h>
     
    int main ()
    {   clrscr ();
        float a,b,c.r;
        cout << "Nhap a:";
        cin >>  a;
        cout << "Nhap b:";
        cin >>  a;
        cout << "Nhap c:";
        cin >>  c;
    
    
        if ( a+b > c || b+c>a || c+a>b)
        {
           r=(a*b)/(b+c+3a);
           cout << "Bán kinh lớn nhất của chiếc bánh là r =: " << r;
    
    
        }
        else
        {
        printf("\n Ba so ban vua nhap ko phai la do dai 3 canh cua 1 tam giac");
        }
        return 0;
    }
    đã tìm ra công thức test xem thế nào nhé, Còn phần làm tròn số thập phân bạn tự làm nhé

  13. #12
    Ðến Từ
    TP. Hồ Chí Minh
    Thành Viên Thứ: 402126
    Giới tính: Nữ
    Bài gửi
    38

    Reply: Hỏi bài: Chia bánh sinh nhật

    Trích Nguyên văn bởi tengiday Xem bài viết
    Bài này có nhiều cách làm. Bạn thử cái này xem nhé.

    Nhận xét:

    Để 2 đường tròn thỏa mãn tính chất bài toán thì:
    a) 2 đường tròn phải tiếp xúc nhau và tiếp xúc với các cạnh của tam giác.
    b) Sẽ có 1 cạnh của tam giác phải tiếp xúc với cả 2 đường tròn. 2 cạnh còn lại chỉ tiếp xúc với 1 đường tròn.
    c) Tâm của mỗi đường tròn phải nằm trên đường thẳng nối giữa tâm của đường tròn nội tiếp và 1 trong 3 đỉnh của tam giác.

    Không mất tính tổng quát, giả sử 2 đường tròn cần tìm tiếp xúc với cạnh a của tam giác ABC như trong hình vẽ.

    Gọi:
    - r là bán kinh của bánh sinh nhật lớn nhất cần tìm (đường tròn nhỏ).
    - R là bán kính của đường tròn nội tiếp tam giác ABC.
    - p là nửa chu vi của tam giác ABC, tức là p = (a + b + c) / 2.
    Mã:
    1/R = sqrt( p / ((p-a)(p-b)(p-c)) ).
    Tại sao?

    Nếu A là diện tích của tam giác thì
    - Ta dễ dàng thấy: A = p*R.
    - Công thức Heron về diện tích tam giác: A = sqrt( p(p-a)(p-b)(p-c) ).


    Gọi u, v, x, y là độ dài các cạnh theo như hình vẽ. Theo hệ quả của định lý Thales, ta có:
    Mã:
    u/x = r/R và v/y = r/R.

    Mã:
    a = u + 2r + v = (x/R)*r + 2r + (y/R)*r = (2 + a/R) * r,
    ta có công thức tìm r như sau:
    Mã:
    r = a/(2 + a/R),
    với 1/R được tính như trên. Đây chính là công thức cần tìm.

    Điểm cuối cùng: a phải là cạnh nào?
    Trả lời: a phải là cạnh dài nhất theo như công thức của r (got it?)

    Code như sau:
    Mã:
    // nhập a, b, c kiểu double.
        
    double p = (a + b + c) / 2,
           inv_R = sqrt(p / (p - a) / (p - b) / (p - c));
        
    a = max(a, b < c ? c : b);
    printf("%.3f\n", a / (2 + a * inv_R));

    Good luck.
    Em thử thấy đúng với trường hợp tam giác vuông do em tự làm. Em xem thử thì thấy đúng hết.
    Cao thủ!!!!!! Em cám ơn anh.

    Trích Nguyên văn bởi aloxinh_nb Xem bài viết
    Mã:
    #include<math.h>
     
    int main ()
    {   clrscr ();
        float a,b,c.r;
        cout << "Nhap a:";
        cin >>  a;
        cout << "Nhap b:";
        cin >>  a;
        cout << "Nhap c:";
        cin >>  c;
    
    
        if ( a+b > c || b+c>a || c+a>b)
        {
           r=(a*b)/(b+c+3a);
           cout << "Bán kinh lớn nhất của chiếc bánh là r =: " << r;
    
    
        }
        else
        {
        printf("\n Ba so ban vua nhap ko phai la do dai 3 canh cua 1 tam giac");
        }
        return 0;
    }
    đã tìm ra công thức test xem thế nào nhé, Còn phần làm tròn số thập phân bạn tự làm nhé
    Em cám ơn anh. Hình như k đúng với test đề bài lắm. Anh có ghi ra tại sao k ạ?

Trang 1/2 12 cuối