Việt-Hàn Coder tuần 2 - Phần 2

Thảo luận trong 'C/C++' bắt đầu bởi chaoviethan, 5 Tháng tư 2011.

  1. Offline

    chaoviethan

    • Thành Viên Mới

    Số bài viết:
    3
    Đã được thích:
    2
    Điểm thành tích:
    0
    Bài toán đong nước: Cho 2 bình nước có dung lượng chứa tương ứng là X (lít) và Y (lít) và Z (lít) là số nước cần đong. Bạn hãy xây dựng chương trình bằng cách cho người ta nhập vào X , Y và Z từ bàn phím (Z<X và Z<Y). Sau đó In ra số lần đong. Ví dụ như:
    Lần 1: 2 4
    Lần 2: 3 6
    ........

    Chú ý: Tương ứng với mỗi lần đong (Lần 1: 2 4) X=2 và Y=4
    Thuật toán dừng khi X=Z hoặc Y=Z. (Ví dụ dừng ở lần 2 vì có X=Z=3 thỏa lượng nước cần đong)
    Với các luật của bài toán như sau (có luật thì dễ dàng hơn nhiều)
    Luật 1: Nếu bình X đầy thì đổ hết nước bình X ra ngoài
    Luật 2: Nếu bình Y = 0 thì đổ nước đầy bình Y
    Luật 3: Nếu bình Y có nước và bình X chưa đầy thì lấy bình Y đổ vào bình X cho đến khi Bình Y hết nước hoặc bình X đầy.

    - Ban đầu 2 bình đều không có nước
    - Có những lần đong sẽ không ra kết quả!. Bạn có thể nhập các thông số sau X=5 Y=7 Z=3 nó sẽ hiện ra 16 lần đong là OK!
    (Rất thực tế và rất giống môn thuật toán mà chúng ta đang học đúng không?:D)
  2. Offline

    integer

    • Tiếu Ngạo Giang Hồ

    • :-?
    Số bài viết:
    1.695
    Đã được thích:
    1.313
    Điểm thành tích:
    900
    Đề quen quen, hình như lấy từ môn AI.
    Kết quả yêu cầu 1 thuật toán hay 1 chương trình chạy được ?
  3. Offline

    chaoviethan

    • Thành Viên Mới

    Số bài viết:
    3
    Đã được thích:
    2
    Điểm thành tích:
    0
    Một chương trình. Thì được áp dụng nhiều mà đâu chỉ mỗi AI, không được tham khảo nhá:D
  4. Offline

    thankailo

    • Friends

    Số bài viết:
    374
    Đã được thích:
    208
    Điểm thành tích:
    140
    Mình viết bằng C#, ASP.NET :D
    Buồn quá ngồi nghĩ viết chơi, mọi người test thử nhá
    P/s: dùng số nhỏ thui khoảng <200 chạy cho nhanh chứ ko nó đứng lun đó :D
    mình dân TMĐT nên viết ko tốt lắm, mọi người góp ý nhá

    Đây là file code behind
    Mã:
    using System;
    using System.Data;
    using System.Configuration;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
    
    public partial class _Default : System.Web.UI.Page 
    {
        protected void Page_Load(object sender, EventArgs e)
        {
                    
        }
        protected void Button1_Click(object sender, EventArgs e)
        {
            int X, Y, Z,i;        
            X = int.Parse(x.Text);
            Y = int.Parse(y.Text);
            Z = int.Parse(z.Text);        
            int a, b; //a,b lần lượt là 2 biến tương ứng với 2 bình X,Y      
            
            if (Y > X)
            {
                a = 0;
                b = Y;
                Response.Write("Lần 1" + ":&nbsp;&nbsp;&nbsp;" + a + " &nbsp;&nbsp;&nbsp;" + b + "<br>");
                if (Z > a || Z > b) { lbl_tb.Text = "Sai điều kiện đề bài. Z < a và Z < b"; break; }
    
                for (i = 2; i >=2; i++)
                {
                    if (a == Z || b == Z) break;                
                    if (a == X)
                    {
                       a = 0;
                       Response.Write("Lần " + i + ":&nbsp;&nbsp;&nbsp;" + a + " &nbsp;&nbsp;&nbsp;" + b + "<br>");
                    }
                    else
                    {
                        if (b == Y)
                        {
                            //chỗ này giá trị của a sẽ luôn nhỏ hơn X ko có lớn hơn
    
                            int d = X - a; //số lít có thể đổ vào bình a
                            a += d;
                            b -= d;
                            Response.Write("Lần " + i + ":&nbsp;&nbsp;&nbsp;" + a + " &nbsp;&nbsp;&nbsp;" + b + "<br>");
                        }
                        else
                        {
                            if (b == 0)
                            {
                                b = Y;
                                Response.Write("Lần " + i + ":&nbsp;&nbsp;&nbsp;" + a + " &nbsp;&nbsp;&nbsp;" + b + "<br>");
    
                            }
                            else
                            //thực chất tại đây giá trị của b luôn nhỏn hơn Y ko thể lớn hơn
                            {
                                int d = X - a;
                                if (d <= b)
                                {
                                    a += d;
                                    b -= d;
                                    Response.Write("Lần " + i + ":&nbsp;&nbsp;&nbsp;" + a + " &nbsp;&nbsp;&nbsp;" + b + "<br>");
                                }
                                else
                                {
                                    a += b;
                                    b = 0;
                                    Response.Write("Lần " + i + ":&nbsp;&nbsp;&nbsp;" + a + " &nbsp;&nbsp;&nbsp;" + b + "<br>");
                                }
    
                            }
                        }
                    }
                    
    
    
                }
            }
            else
            {
                if (X == Y)
                {
                    lbl_tb.Text = "Không tìm ra được kết quả vì X = Y";
                }
                else
                {
                    b = 0;
                    a = X;
                    Response.Write("Lần 1" + ":&nbsp;&nbsp;&nbsp;" + a + " &nbsp;&nbsp;&nbsp;" + b + "<br>");
                    for (i = 2; i >= 2; i++)
                    {
                        if (a == Z || b == Z) break;
                        if (b == Y)
                        {
                            b = 0;
                            Response.Write("Lần " + i + ":&nbsp;&nbsp;&nbsp;" + a + " &nbsp;&nbsp;&nbsp;" + b + "<br>");
                        }
                        else
                        {
                            if (a == X)
                            {
                                //chỗ này giá trị của a sẽ luôn nhỏ hơn X ko có lớn hơn
    
                                int d = Y - b; //số lít có thể đổ vào bình a
                                b += d;
                                a -= d;
                                Response.Write("Lần " + i + ":&nbsp;&nbsp;&nbsp;" + a + " &nbsp;&nbsp;&nbsp;" + b + "<br>");
                            }
                            else
                            {
                                if (a == 0)
                                {
                                    a = X;
                                    Response.Write("Lần " + i + ":&nbsp;&nbsp;&nbsp;" + a + " &nbsp;&nbsp;&nbsp;" + b + "<br>");
    
                                }
                                else
                                //thực chất tại đây giá trị của b luôn nhỏn hơn Y ko thể lớn hơn
                                {
                                    int d = Y - b;
                                    if (d <= a)
                                    {
                                        b += d;
                                        a -= d;
                                        Response.Write("Lần " + i + ":&nbsp;&nbsp;&nbsp;" + a + " &nbsp;&nbsp;&nbsp;" + b + "<br>");
                                    }
                                    else
                                    {
                                        b += a;
                                        a = 0;
                                        Response.Write("Lần " + i + ":&nbsp;&nbsp;&nbsp;" + a + " &nbsp;&nbsp;&nbsp;" + b + "<br>");
                                    }
    
                                }
                            }
                        }
    
    
    
                    }
                }
            }
            
    
        }
    }
    
    Đây là file *.aspx
    HTML:
    <%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
        <title>Untitled Page</title>
    </head>
    <body>
    <center>
        <form id="form1" runat="server">
        <div>
        
        </div>
            <table border="1">
                <tr>
                    <td align="center" colspan="2" style="height: 42px">
                        <asp:Label ID="Label4" runat="server" Font-Bold="True" Font-Size="X-Large" Text="Bài Toán Đong Nước"></asp:Label></td>
                </tr>
                <tr>
                    <td colspan="2" style="height: 51px; color: red;" align="left">
                        &nbsp;&nbsp;
                        Điều kiện: Z&lt;X và Z&lt;Y&nbsp;<br />
                        &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; Z,X,Y thuộc số tự nhiên</td>
                </tr>
                <tr>
                    <td style="width: 132px">
                        <asp:Label ID="Label1" runat="server" Font-Bold="True" Text="X (Số lít B1 chứa)"></asp:Label></td>
                    <td style="width: 100px">
                        <asp:TextBox ID="x" runat="server"></asp:TextBox></td>
                </tr>
                <tr>
                    <td style="width: 132px">
                        <asp:Label ID="Label2" runat="server" Font-Bold="True" Text="Y (Số lit B2 chứa)"></asp:Label></td>
                    <td style="width: 100px">
                        <asp:TextBox ID="y" runat="server"></asp:TextBox></td>
                </tr>
                <tr>
                    <td style="width: 132px">
                        <asp:Label ID="Label3" runat="server" Font-Bold="True" Text="Z (Số lit cần đong)"></asp:Label></td>
                    <td style="width: 100px">
                        <asp:TextBox ID="z" runat="server"></asp:TextBox></td>
                </tr>
                <tr>
                    <td style="width: 132px">
                    </td>
                    <td style="width: 100px">
                        <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" /></td>
                </tr>
                <tr>
                    <td align="center" colspan="2">
                        <asp:Label ID="lbl_tb" runat="server"></asp:Label></td>
                </tr>
            </table>
        </form>
        </center>
    </body>
    </html>
    
    integer thích bài này.
  5. Offline

    integer

    • Tiếu Ngạo Giang Hồ

    • :-?
    Số bài viết:
    1.695
    Đã được thích:
    1.313
    Điểm thành tích:
    900
    Bẵng đi 1 thời gian có lẽ đến lúc chương trình cần khởi động lại. Ai sẽ là người bắt đầu tuần 3 đây.

Chia sẻ trang này

Advertising: Linux system admin | nukeviet | nukeviet 4 | Upload ảnh miễn phí