Trang chủ Tin Học Lớp 8 các bậc cao nhân giúp với ạ, trân trọng cảm...

các bậc cao nhân giúp với ạ, trân trọng cảm ơn lập trình c++, kèm giải thích Thang máy Loại đề bài Thang máy chỉ giới hạn tối đa khối lượng mang là 500kg. Trướ

Câu hỏi :

các bậc cao nhân giúp với ạ, trân trọng cảm ơn lập trình c++, kèm giải thích Thang máy Loại đề bài Thang máy chỉ giới hạn tối đa khối lượng mang là 500kg. Trước cửa thang máy có N người, mỗi người có trọng lượng hi (1 hi N). Yêu cầu Chọn số người vào thang máy sao cho không vượt quá khối lượng mang và số người đi là nhiều nhất. Dữ liệu Dòng 1 ghi một số nguyên N là số lượng người trước cửa thang máy (1 N 100). Dòng 2 ghi N số nguyên cách nhau một dấu cách là cân nặng của mỗi người. Kết quả Dòng 1 ghi tổng khối lượng của số người được chọn đi. Dòng 2 ghi trọng lượng của mỗi người được chọn, mỗi số cách nhau một dấu cách (Không thay đổi thứ tự của từng người). Ví dụ INPUT 12 60 70 30 15 17 80 16 75 90 85 40 75 OUTPUT 478 60 70 30 15 17 80 16 75 40 75

image

Lời giải 1 :

#include <bits/stdc++.h>

using namespace std;

int n;

// h[i].first: lưu cân nặng

// h[i].Second: lưu vị trí ban đầu của của h[i]

// Sau khi sắp xếp lại mảng vì vị trí thay đổi nên cần lưu vị trí ban đầu

pair<int, int> h[105];

int main() {

    cin >> n;

    for (int i = 1; i <= n; i++) {

        cin >> h[i].first;

        h[i].second = i;

    }

    

    // Sắp xếp lại mảng để có thứ tự từ nhẹ nhất đến nặng nhất

    // Từ đó có thể xếp vào được nhiều người nhất có thể

    // Mảng bắt đầu từ 1 nên sắp xếp từ iterator h+1 đến h+n+1

    sort(h+1, h+n+1);

    

    // Số người mà đã vào thang máy

    int m = 0;

    // Tổng số cân nặng của những người đã được xếp vào thang máy

    int sum_weight = 0;

    // Những người đã được vào thang máy

    vector<pair<int, int>> b;

    

    while (sum_weight + h[m+1].first <= 500 && m+1 <= n) {

        // Nếu tổng số cân nặng của những người đã được xếp vào thang máy ít hơn 500 thì vẫn thêm đc vào

        m++; sum_weight += h[m].first;

        // Thêm h[i] vào b, lần này vị trí của h[i] trong h sẽ đặt làm first để sắp xếp lại theo thứ tự

        b.push_back(make_pair(h[m].second, h[m].first));

    }

    

    // Sắp xếp lại b theo thứ tự vị trí

    sort(b.begin(), b.end());

    

    // In kết quả

    cout << sum_weight << "\n";

    for (int i = 0; i < b.size(); i++) {

        cout << b[i].second << " ";

    }

    

    return 0;

}

Thảo luận

-- bạn có dịch sang được std không ạ?
-- là sao bạn
-- chưa biết bạn hỏi cái gì nhưng chắc là được
-- là dịch code của bạn sang kiểu stdc++ í ạ
-- r đó

Lời giải 2 :

$\underline{\text{Cách làm:}}$

Nhập n, mảng a.

Sắp xếp mảng a theo thứ tự tăng dần, tạo biến s dùng để tính tổng, mảng b để lưu lại những khối lượng có thể vào thang máy (nếu a[i] có thể vào thì b[a[i]]++), khi i==n hoặc s+a[i]>500 thì kết thúc và trả về kết quả.

Duyệt mảng a, nếu vị trí thứ a[i] của mảng b !=0 thì xuất a[i], nếu a[i] đã vào thì b[a[i]]--.

$\\$

$\underline{\text{Code:}}$

#include <iostream>
#include <algorithm>
using namespace std;
struct v{
    int sum;
    int *arr;
};
v t(int arr[], int n)
{
    int s = 0;
    int b[1000];
    for (int i=0; i<=1000; i++) b[i]=0;
    int a[n];
    for (int i=0; i<n; i++) a[i]=arr[i];
    sort(a,a+n);
    for (int i=0; i<n; i++)
    {
        if (s+a[i]>500) break;
        s+=a[i];
        b[a[i]]++;
    }
    v r;
    r.sum=s;
    r.arr=b;
    return r;
}
int main()
{
    int n;
    cin >> n;
    int a[n];
    for (int i=0; i<n; i++) cin >> a[i];
    v h = t(a,n);
    cout << h.sum << endl;
    for (int i=0; i<n; i++)
    {
        if (h.arr[a[i]]!=0) {cout << a[i] << " "; h.arr[a[i]]--;}
    }
}

$\\$

`@Daoanhviet96`

image

Bạn có biết?

Tin học, tiếng Anh: informatics, tiếng Pháp: informatique, là một ngành khoa học chuyên nghiên cứu quá trình tự động hóa việc tổ chức, lưu trữ, xử lý và truyền dẫn thông tin của một hệ thống máy tính cụ thể hoặc trừu tượng (ảo). Với cách hiểu hiện nay, tin học bao hàm tất cả các nghiên cứu và kỹ thuật có liên quan đến việc mô phỏng, biến đổi và tái tạo thông tin.

Nguồn : Wikipedia - Bách khoa toàn thư

Tâm sự 8

Lớp 8 - Năm thứ ba ở cấp trung học cơ sở, học tập bắt đầu nặng dần, sang năm lại là năm cuối cấp áp lực lớn dần nhưng các em vẫn phải chú ý sức khỏe nhé!

Nguồn : ADMIN :))

Liên hệ hợp tác hoặc quảng cáo: gmail

Điều khoản dịch vụ

Copyright © 2021 HOCTAPSGK