Gửi Thông Điệp Yêu Thương vanbinh_bt nhắn với all: thi sao rồi mấy đồ...[Mr]-Boom nhắn với All K4: Chúc mọi người có 1 kỳ thi thật tốt !!lặng lẽ yêu nhắn với nguyễn ngọc huy: chúc mi có một kỳ thi tốt nha. vẫn nhớ mingocthongcctm05f nhắn với QNGAI: hãy sát cánh bên nhau.....hi.......trinhvh91 nhắn với TM03B: TM03B đoàn kết đi chơi cuối khóa nghenNgười vô cảm nhắn với nguyenlu: Ai vậy? T vẫn bước đi trong yêu thương mà ^^381 nhắn với neyugn: mong rằng chúng ta sẽ đi đến cái đích cuối cùng !nguyenlu nhắn với Người vô cảm: Hãy bước đi trong sự yêu thươnglenguyen_alone nhắn với Young Bin: tại sao nhok lại iu bin chứ nhỉ???hp thành công nhá!!binhcaolinh nhắn với Đen Trần: Cố gắng học chăm chỉ nhé em! Gửi Thông Điệp Yêu Thương


BẢNG GIÁ QUẢNG CÁO TẠI DIỄN ĐÀN 2MIT.ORG 2012

Hiện kết quả từ 1 tới 3 của 3

Chủ đề: Tìm dãy số có tổng dương dài nhất.

  1. #1
    Tham gia ngày
    Sep 2009
    Đến từ
    LT3C Co., Ltd
    Tuổi
    21
    Bài gửi
    1,635
    Cảm ơn
    1,170
    Được cảm ơn 1,245/499 bài viết
    Blog Entries
    10
    8
    MASTER
     
     
    Số lần cộng|trừ: 3 lần

    Default Tìm dãy số có tổng dương dài nhất.

    Đề như sau: Cho 1 dãy số nguyên, có giá trị âm và không âm. vd: 1 -2 5 -10 2 33 12 -9 -3.
    Viết thuật toán tìm dãy số dài nhất có thể và có tổng dương.

    Mình có thuật toán như sau:
    - Xét tổng của dãy. Nếu tổng lớn hơn 0 --> dãy dài nhất chính là dãy ban đầu --> xuất ra.
    - Nếu tổng nhỏ hơn 0.
    - Duyệt từ đầu dãy và, duyệt qua phần từ nào đếm số phần tử và gán số phần tử đã duyệt cho biến i. dừng lại tại giá trị < 0 đầu tiên gặp được.
    - Duyệt từ cuối dãy về. đếm số phần tử đã duyệt cho biến j. dừng lại khi gặp giá trị âm đầu tiên
    --> Lúc này 2 biến i và j thể hiện vị trí từ đầu danh sách đến số âm đầu tiên đi lên và từ cuối danh sách đến số âm đầu tiên từ cuối về.

    Ta xét 2 số i ,j.
    i = j => số nào nhỏ hơn thì loại. Mục đích là lấy số lớn hơn. 2 số bằng nhau(trường hợp này mình chưa xét).
    i > j. lấy danh sách xuất phát từ đầu đến vị trí j. Vì ta lấy theo tiêu chí là dãy số dài nhất có thể. từ cuối dãy về gặp số âm trước nên loại phần cuối(tính từ j -> hết dãy). tính tổng dãy . nếu dương --> xuất ra, nếu âm --> gọi đệ quy, xét tiếp dãy số còn lại.
    i < j. Ngược lại, lấy danh sách mời từ vị trí i -> hết dãy. tính tổng. nếu dương --> xuất kết quả. nếu âm --> gọi đệ quy tính tiếp.

    Đây mới là thuật toán sơ bộ, còn nhiều thuật toán khác để làm việc này. mình chưa cài đặt thuật toán này. ai làm rồi cho tham khảo nhé.

    --------------------------------------------------
    Xem các chủ đề cùng chuyên mục:


    +2 EXP
    Hãy nghĩ tới những điều tốt đẹp

  2. #2
    Tham gia ngày
    Sep 2009
    Đến từ
    LT3C Co., Ltd
    Tuổi
    21
    Bài gửi
    1,635
    Cảm ơn
    1,170
    Được cảm ơn 1,245/499 bài viết
    Blog Entries
    10
    8
    MASTER
     
     
    Số lần cộng|trừ: 3 lần

    Default

    Tân xuân khai bút, nghiệp mình không dùng bút thì chuột và bàn phím
    Demo chưa test đâu:
    Code:
    int tong(int m[],int f,int n)
    {
        int tong=0;
        for(int i=f; i<n; i++)
            tong+=m[i];
        if(tong>0)
            return tong;
        else return 0;
    }
    void xuat(int m[],int f,int n)
    {
        for(int i=f; i<n; ++)
            cout<<m[i]<<"\t";
    }
    void nhap(int m[],int n)
    {
        cout<<"\nNhap n: ";
        cin>>n;
        for(int i=0; i<n; i++)
        {
            cout<<"Nhap "<<i<<": ";
            cin>>m[i];
        }
    }
    main ()
    {
        int f=0;// vi tri dau tien
        if(tong(m,n)<=0)
            xuat(m,f,n);
        else
        {
            int cfirst=0,clast=0;
            for(int i=0; i<n; i++)
            {
                if(m[i]<0)
                    break;
                else
                    cfirst++;
            }
            for(int j=n;j>0;j--)
            {
                if(m[j]<0)
                    break;
                else
                    clast++;
            }
            //xet 2 so i,j
            if(i==j)
                {
                    if(m[i]<m[j])
                        {
                            f=i+1;// lay day sau vi tri i den n
                            xuat(m,f,n);
                        }
                    else
                        xuat(m,f,(n-j)-1);//n-j la vi tri gap so am dau tien, lay n tai
                                        //loai them phan tu tai vi tri j nua
                }
            if(i>j)
                {
                
                }
        }
    }
    Khai bút nên làm tạm thế đã, ra tết làm tiếp, chúc mọi người học tốt

    Hãy nghĩ tới những điều tốt đẹp

  3. Có tổng cộng 2 thành viên cảm ơn integer cho bài viết này

    lyvinhr00m (06-02-2011), sunboy (06-02-2011)

  4. #3
    Tham gia ngày
    Sep 2009
    Đến từ
    LT03C
    Tuổi
    21
    Bài gửi
    1,221
    Cảm ơn
    863
    Được cảm ơn 905/417 bài viết
    Blog Entries
    4
    9
    MASTER
     
     
    Số lần cộng|trừ: 1 lần

    Default

    Tết mà vẫn siêng thế chú

    ---------------------------------------
    Code:
    #include:vinhroom.2mit@2mit.org
    #include:xiliton_keomut_1002
    #include:CCQ.LT03C
    #include:http://2mit.org

Thông tin về chủ đề này

Users Browsing this Thread

Hiện giờ đang có 1 người xem chủ đề này. (0 thành viên 1 khách)

     

Chủ đề giống nhau

  1. blog được bình chọn có nhiều nhạc trẻ mới nhất
    By googletinhyeu in forum Đời sống sinh viên
    Trả lời: 13
    Bài mới gửi: 11-01-2011, 08:38 AM
  2. 10 nghề có giá nhất năm 2011 ở Mỹ
    By lpclong in forum Tin tức công nghệ
    Trả lời: 1
    Bài mới gửi: 05-01-2011, 09:55 AM
  3. Nhảy việc theo tiền lương, có đáng hay không?
    By zphuoocm in forum Phỏng vấn - Tán gẫu
    Trả lời: 0
    Bài mới gửi: 18-04-2010, 02:30 PM
  4. Trả lời: 3
    Bài mới gửi: 12-07-2009, 10:25 PM

746
Lượt xem

Share