Trang 1/3 123 cuối
kết quả từ 1 tới 12 trên 34

Nhờ các bạn xem bài này giùm nên làm thế nào

  1. #1
    Ðến Từ
    Thừa Thiên - Huế
    Thành Viên Thứ: 356879
    Giới tính: Nam
    Bài gửi
    50

    Nhờ các bạn xem bài này giùm nên làm thế nào

    Cho một văn bản gồm N dòng. Các ký tự được lấy từ tập các chữ cái và chữ số.
    Yêu cầu: Tìm số lượng ký tự của dòng ngắn nhất, số lượng ký tự của dòng dài nhất và số lượng ký tự của văn bản.
    Dữ liệu vào: Cho trong file văn bản CAU3.INP, có cấu trúc như sau:
    - Dòng 1: Ghi số nguyên dương N là số dòng của văn bản (1 ≤ N ≤ 100).
    - N dòng tiếp theo: Mỗi dòng ghi một xâu gồm L ký tự (0 < L < 255).
    Dữ liệu ra: Ghi ra file văn bản CAU3.OUT, theo cấu trúc như sau:
    - Dòng 1: Ghi 3 số nguyên dương x y z. Trong đó: x là số lượng ký tự của dòng ngắn nhất; y là số lượng ký tự của dòng dài nhất, z là số lượng ký tự của văn bản. Các số được ghi cách nhau ít nhất một dấu cách.
    Ví dụ:
    CAU3.INP CAU3.OUT
    3
    ThiHSG09
    Nam2015
    Vong1
    5 8 20

    BÀI 2
    Trong mùa mưa lũ tại các tỉnh miền Trung, có N bạn học sinh cần sang sông để đi học, với phương tiện là một chiếc thuyền tự lái. Chiếc thuyền tự lái này chỉ chở được tối đa là 2 người trên mỗi chuyến đi. Bạn thứ i nếu sang sông một mình sẽ mất thời gian là M[i]. Bạn thứ i và thứ j cùng sang sông sẽ mất thời gian Max(M[i], M[j]). Em hãy lập trình giúp các bạn đó tính thời gian nhỏ nhất có thể để đưa được tất cả các bạn qua sông cho kịp giờ vào lớp.
    Ví dụ:
    N=7
    M: 2 3 5 6 4 10 14
    Thời gian nhỏ nhất cần tìm là: 45
    Dữ liệu vào từ file: hsg3.inp
    Dòng 1: Số học sinh N
    Dòng 2: Thời gian sang sông của từng bạn M[i], i=1,2,…,N.
    Dữ liệu ra file: hsg3.out
    Dòng 1: Thời gian nhỏ nhất để đưa tất cả các bạn qua sông.
    Ví dụ:
    Dữ liệu vào từ file: hsg3.inp
    7
    2 3 5 6 4 10 14
    Dữ liệu ra file: hsg3.inp
    45
    Quick reply to this message Trả lời       


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

    Reply: Nhờ các bạn xem bài này giùm nên làm thế nào

    Bài 1 là kỹ thuật lập trình.

    Bài 2:
    - Cái chính là bạn cần giữ 2 người có thời gian bé nhất ở 2 bờ để chèo thuyền (đề không nói rõ, nhưng cần có người chèo thuyền trở về).
    - Ví dụ:
    a) (2, 3) sang sông rồi 2 trở về.
    b) (14, 10) sang sông rồi 3 trở về (lấy từ cặp lớn tới nhỏ).
    c) (2, 3) sang sông rồi 2 trở về (bước này đảm bảo 2 bờ sông cần có ng` có thời gian bé nhất để chèo thuyền).
    d) ......
    Bạn làm bằng tay cho hiểu rồi sẽ tự code được nhé.

    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.

  3. Đã cảm ơn tengiday:


  4. #3
    Ðến Từ
    Thừa Thiên - Huế
    Thành Viên Thứ: 356879
    Giới tính: Nam
    Bài gửi
    50

    Reply: Nhờ các bạn xem bài này giùm nên làm thế nào

    bài 1 : mình muốn hỏi là
    với cách như thế mình tính xây dựng một hàm để đếm kí tự.nhưng hàm thì chỉ lấy lại được một kết quả.nên mình ko biết hàm này sẽ đếm như thế nào.chẳng nhẽ phải xây dựng ba hàm.mỗi hàm một công việc.

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

    Reply: Nhờ các bạn xem bài này giùm nên làm thế nào

    Bạn không cần xây dựng 3 hàm đâu. Bạn đọc dữ liệu xong là in kết quả ra luôn ấy chứ. Bạn để 3 biến lưu độ dài ngắn nhất, độ dài dài nhất, và tổng ký tự là được. 1 chuỗi đọc vào là xử lý ngay, không cần lưu lại. Bài 1 đơn giản, bạn làm thế nào cũng được.

  6. Đã cảm ơn tengiday:


  7. #5
    Ðến Từ
    Thừa Thiên - Huế
    Thành Viên Thứ: 356879
    Giới tính: Nam
    Bài gửi
    50

    Reply: Nhờ các bạn xem bài này giùm nên làm thế nào

    Bài 2: mình suy nghĩ code mãi mà không ra.nhờ bạn giải giúp được không ạ

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

    Reply: Nhờ các bạn xem bài này giùm nên làm thế nào

    Em theo ví dụ của anh tengiday thì viết như sau. Em k biết Pascal, nhưng em nghĩ nó cũng khá giống C.
    Mã:
    void qsort(int *a, int L, int R) {
        if (L < R) {
            int i = L, j = R, mid = a[i+(j-i)/2];
            while (i < j) {
                while (a[i] > mid) i++;
                while (a[j] < mid) j--;
                if (i <= j) {
                    int t = a[i];
                    a[i] = a[j];
                    a[j] = t;
                    i++;
                    j--;
                }
            }
            qsort(a, L, j);
            qsort(a, i, R);
        }
    }
    
    int river_crossing(int *a, int n) {
        if (n < 1)
            return 0;
        if (n < 2)
            return a[0];
        
        qsort(a, 0, n-1); // sap xep tu lon toi nho
        
        int tg = a[n-2], // Cap co thoi gian nho nhat sang song. Day la buoc khoi dong bat buoc.
            i;
        for (i = 0; i < n-2; i += 2) {
            tg += a[n-1] + a[i]; // Con nguoi o bo song, nen nguoi nho nhat a[n-1] phai tro ve. Sau do a[i] qua song.
            
            // Neu so luong nguoi la le thi a[i] sang song se dan theo a[n-1]. Day la chuyen cuoi cung.
            // Neu so luong nguoi la chan thi a[i] sang song se dan theo a[i+1]. Sau do a[n-2] phai quay ve de don a[n-1] sang song.
            if (i < n-3)
                tg += a[n-2] + a[n-2];
        }
        
        return tg;
    }

    Quy tắc như anh kia đã nói vậy. Nếu từ bờ A xuất phát qua bờ B thì:
    1) Sắp xếp dãy a giảm dần.
    2) Cho hai người cuối danh sách sang sông (a[n-1] và a[n-2]) qua bờ B.
    Nếu vẫn còn người ở bờ sông bên A thì thực hiện như sau:
    3) Cho người có thời gian nhỏ hơn (tức là a[n-1]) từ B trở về bờ A.
    4) Cho 2 người có thời gian lớn nhất từ A sang B.
    Lưu ý nếu số người là lẻ thì đây là đợt cuối. Nếu k thì thực hiện bước sau:
    5) Cho a[n-2] từ B quay về A. Đây là người có thời gian qua sông thấp thứ 2.
    Lúc này a[n-1] và a[n-2] đã ở bờ A.
    6) Quay lại bước 2.

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

    Reply: Nhờ các bạn xem bài này giùm nên làm thế nào

    Trích Nguyên văn bởi tuonglong Xem bài viết
    Bài 2: mình suy nghĩ code mãi mà không ra.nhờ bạn giải giúp được không ạ
    Bài này chỉ cần đệ quy là ra mà.
    Yêu cầu rõ ràng là thời gian sang. Bỏ qua thời gian thuyền về vì nó là tự lái và thời gian quay về không đề cập.

    Dữ liệu đầu vào theo ví dụ sẽ phân tích như sau:

    N=7
    M: 2 3 5 6 4 10 14
    Thời gian nhỏ nhất cần tìm là: 45

    Tổng số người cần thực hiện là 7. Theo đề bài mỗi lần có thể chở được 2 người. Vậy tổng số cặpp sẽ phải là 7/2+1 = 4(lấy phần nguyên).

    Bây giờ nhiệm vụ của bạn còn lại là: Tạo một vòng lặp để tính toán lấy ra thời gian nhỏ nhất với 4 cặp số trong dãy M nữa là xong.
    Bạn thự hiện đệ quy để lấy kết quả.

    Giải thuật đã có, giờ chỉ còn nhiệm vụ thực hiện nữa là xong.
    Chuyên đồ chơi Điều Khiển Từ Xa RCHaTo - máy bay điều khiển - Camera bay - Ô tô điều khiển - http://rchato.com - 0962 672 028

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

    Reply: Nhờ các bạn xem bài này giùm nên làm thế nào

    Trích Nguyên văn bởi tengiday Xem bài viết
    Bài 1 là kỹ thuật lập trình.

    Bài 2:
    - Cái chính là bạn cần giữ 2 người có thời gian bé nhất ở 2 bờ để chèo thuyền (đề không nói rõ, nhưng cần có người chèo thuyền trở về).
    - Ví dụ:
    a) (2, 3) sang sông rồi 2 trở về.
    b) (14, 10) sang sông rồi 3 trở về (lấy từ cặp lớn tới nhỏ).
    c) (2, 3) sang sông rồi 2 trở về (bước này đảm bảo 2 bờ sông cần có ng` có thời gian bé nhất để chèo thuyền).
    d) ......
    Bạn làm bằng tay cho hiểu rồi sẽ tự code được nhé.

    Good luck.
    Đây là thuyền tự lái nên bác không cần giữ 1 người quay về. Theo đề bài đã đưa ra mà. Chúng ta khi làm sẽ căn cứ theo đề bài chứ không đưa thêm tham số vào.

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

    Reply: Nhờ các bạn xem bài này giùm nên làm thế nào

    Nhưng mà kết quả theo dữ liệu đầu vào
    N=7
    M: 2 3 5 6 4 10 14
    Thời gian nhỏ nhất cần tìm là: 45 => 45 là không đúng.
    Tại sao không đúng: Dãy M có tổng là: 44. Trong khi mỗi lần sang tối đa đã được 2 người. Thì nghĩa là tổng thời gian lớn nhất cũng chỉ 44 nếu đi từng người. Không bao giờ lên được 45.

    Kết quả bài này khi chạy phải là: 14+6+4+2 = 26.

    Mục đích bài này đơn giản là chuyển cái mảng M thành cặp (a;b) có tổng 2 số lớn nhất trong mảng chưa được chọn.

    Khi chạy trên giấy sẽ thực hiện các bước như sau:

    Vòng 1 1: Hỏi trong mảng 2 số lớn nhất trong mảng M. Kết quả là 14 và 10. Lấy ra số lớn nhất trong 2 số: Bạn được 14. Loại 14, 10 ra khỏi mảng M.
    Vòng 2: Hỏi trong mảng 2 số lớn nhất tỏng mảng M thu được từ bước 1. Kết quả laf6 và 5. Lấy 2 số lớn nhất trong 2 số bạn được 6. Loại 5, 6 ra khỏi mảng M.
    Vòng 3: Tương tự lấy được 3, 4 => lấy ra 4.
    Vòng 4: Chỉ còn 1 số 2, nên sẽ lấy ra số 2.

    Tổng 4 vòng kết quả là 14+6+4+2 = 26.

    Bạn đưa vào đệ quy như sau:

    function tongmin(n,m,total){
    /*
    n là số người cần chuyển sang
    m là mảng thời gian của mỗi người. Sau này có thể loại bỏ tham số n vì trong m đã có thông tin này rồi
    total là tổng thu được sau mỗi lần lặp, bạn phải truyền vào đệ quy để không cần tạo thêm biến khác.
    */
    //Lấy ra 2 số lớn nhất trong mảng m => kỹ thuật lập trình
    //Loại bỏ 2 phần tử vừa lấy ra khỏi mảng m, nhớ giảm n = n-2;(Mỗi lượt chở được 2 người)
    //nếu n <=0 thì in ra màn hình total và thoát đệ quy, ngược lại thì gọi hàm
    //total=total+số lớn nhất trong 2 số vừa thu được.
    tongmin(n,m,total);

    }



  12. #10
    Ðến Từ
    Hà Nội
    Thành Viên Thứ: 358027
    Bài gửi
    1.723

    Reply: Nhờ các bạn xem bài này giùm nên làm thế nào

    Nói đơn giản đề bài 2 không hợp lý thì khỏi cần giải

    Để dễ hình dung: bài toán là người lái đò chở học sinh qua sông, người lái đò chịu trách nhiệm cầm lái, trên thuyền có 2 chỗ trống chở học sinh và chỉ có duy nhất 1 thuyền chở học sinh sang sông

    Chở 1 học sinh mất M[i]
    Chở 2 học sinh mất MAX(M[i], M[j])
    Không chở học sinh mất ???

    Thuyền từ bên bờ A sang bờ B thì phải quay lại đón lượt học sinh kế tiếp, lúc đó thuyền không chở học sinh nào cả

    Nói đơn giản bài này muốn thỏa mã MIN thỏa mãn 2 điều kiện

    - mỗi lần chở phải đạt tối đa 2 học sinh nếu có thể
    - mỗi lần chở phải có 2 học sinh có thời gian lâu nhất

    Học PASCAL (hoặc các ngôn ngữ khác) nên tải cuốn Giải thuật và lập trình của LÊ MINH HOÀNG về xem, khá là bổ ích
    www.thuthuatdoday.tk - Chia sẻ thủ thuật, tiện ích máy tính

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

    Reply: Nhờ các bạn xem bài này giùm nên làm thế nào

    Ối em xem thấy có bài cũng bảo chủ thớt đề sai. Sau đó chủ thớt nói lại cho vỡ mồm mà vẫn k biết. Đề đúng hay sai là do bạn thớt định nhé mọi người.Còn cách làm của bạn rchato thì k tối ưu chút nào. Hiểu theo kiểu của bạn mà làm thế thì k hay rồi. Cần phải sắp xếp lại trước sẽ nhanh hơn. Bạn k tin thì viết code ra sẽ test. Có cái code mà test thì "anh chỉ biết câm nín".

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

    Reply: Nhờ các bạn xem bài này giùm nên làm thế nào

    Trích Nguyên văn bởi LanSG9x Xem bài viết
    Ối em xem thấy có bài cũng bảo chủ thớt đề sai. Sau đó chủ thớt nói lại cho vỡ mồm mà vẫn k biết. Đề đúng hay sai là do bạn thớt định nhé mọi người.Còn cách làm của bạn rchato thì k tối ưu chút nào. Hiểu theo kiểu của bạn mà làm thế thì k hay rồi. Cần phải sắp xếp lại trước sẽ nhanh hơn. Bạn k tin thì viết code ra sẽ test. Có cái code mà test thì "anh chỉ biết câm nín".
    Trong lập trình thì điều đầu tiên cần làm được là phải chạy được. Còn tối ưu là khi đã hiểu rồi, đã cho chạy được rồi mới nói tới tối ưu. Mình cũng là dân lập trình. Có thể tìm theo thông tin thanhhait92 để biết thêm thông tin.

    Mình phân tích, đưa ra các bước như vậy mục đích là để chủ thớt hiểu vấn đề, hiểu giải thuật. Vì chủ thớt chưa hiểu được bài toán để chạy thì nói gì tới chuyện tối ưu. Bao giờ nắm vững giải thuật, chạy được thực tế trên giấy, trên máy thì lúc đó mới nói tới tối ưu hóa câu lệnh.
    Giống như học chữ vậy, phải học từng chữ cái rồi lúc đó mới học ghép chữ, rồi mới học làm văn. Viết chữ còn chưa biết thì làm sao biết làm văn hay.

Trang 1/3 123 cuối