Tin học Tiền

Nguyễn Trần Phát

Học sinh mới
Thành viên
8 Tháng chín 2020
111
45
11
16
Nghệ An
THCS Đặng Thai Mai

Attachments

  • MONEY.pdf
    325.4 KB · Đọc: 156

Lê Văn Đông

Học sinh tiến bộ
Thành viên
17 Tháng mười 2015
1,422
1,477
244
TP Hồ Chí Minh
ᴳᵒᵈ乡bőýfŕíéńd
@Nguyễn Trần Phát
Bài này chưa hoàn thiện, mình chỉ mới viết hàm và test thử, bạn có thể sử dụng để áp dụng vào bài.
* Bài này hình như mình đọc đề không hiểu rõ hoặc đáp án của đề bị sai. Mình ra 2 9 18 mà đề là 2 2 18.
Bài này bạn cần lưu ý phần đổi tiền là là được.
Mã:
#include<iostream>
using namespace std;

void doiTien(int &g, int &s, int &k) {
    while (s >= 17 || k >= 29) {

        if (s >= 17) {
            s -= 17;
            g++;
        }

        else if (k >= 29) {
            k -= 29;
            s++;
        }
    }
}

//Tiền còn lại gồm 6 tham số: g,s,k là các đồng tiền. p,q,r là giá tiền tương ứng với các g,s,k
void tienConLai(int& g, int& s, int& k, const int& p, const int& q, const int& r) {
    g -= p;

    if (s - q < 0) {
        s = g * 17 + s - q; // Đổi tiền từ đồng g sang đồng s rồi trừ cho giá
    }
    else {
        s -= q;
    }

    if (k - r < 0) {
        k = s * 29 + k - r;// Đổi tiền từ đồng s sang đồng k rồi trừ cho giá
    }
    else {
        k -= r;
    }
}

int main() {
    int g = 5; //Đồng Galeon
    int s = 16;// Đồng Sikel
    int k = 10;//Đồng Knat

    tienConLai(g, s, k, 3, 9, 21);//Trừ tiền món 1
    tienConLai(g, s, k, 0, 4, 0);// Trừ tiền món 2

    doiTien(g, s, k);//Đổi lại tiền

    if (g >= 0 && s >= 0 && k >= 0) {//Kiểm tra xem có cái nào âm không, nếu dương thì xuất tiền
        cout << "Tien g: " << g << endl;
        cout << "Tien s: " << s << endl;
        cout << "Tien k: " << k << endl;
    }
    else {// Nếu âm thì xuất -1
        cout << "-1";
    }

    return 0;
}

Nếu bạn chưa học hàm bạn có thể tham khảo đoạn code sau, hơi dài dòng
Mã:
int main() {
    int g = 5; //Đồng Galeon
    int s = 16;// Đồng Sikel
    int k = 10;//Đồng Knat
    int p1 = 3, q1 = 9, r1 = 21;
    int p2 = 0, q2 = 4, r2 = 0;

    g -= p1;

    if (s - q1 < 0) {
        s = g * 17 + s - q1; // Đổi tiền từ đồng g sang đồng s rồi trừ cho giá
    }
    else {
        s -= q1;
    }

    if (k - r1 < 0) {
        k = s * 29 + k - r1;// Đổi tiền từ đồng s sang đồng k rồi trừ cho giá
    }
    else {
        k -= r1;
    }

    g -= p2;

    if (s - q2 < 0) {
        s = g * 17 + s - q2; // Đổi tiền từ đồng g sang đồng s rồi trừ cho giá
    }
    else {
        s -= q2;
    }

    if (k - r2 < 0) {
        k = s * 29 + k - r2;// Đổi tiền từ đồng s sang đồng k rồi trừ cho giá
    }
    else {
        k -= r2;
    }

    //Doi tien
    while (s >= 17 || k >= 29) {

        if (s >= 17) {
            s -= 17;
            g++;
        }

        else if (k >= 29) {
            k -= 29;
            s++;
        }
    }

    if (g >= 0 && s >= 0 && k >= 0) {//Kiểm tra xem có cái nào âm không, nếu dương thì xuất tiền
        cout << "Tien g: " << g << endl;
        cout << "Tien s: " << s << endl;
        cout << "Tien k: " << k << endl;
    }
    else {// Nếu âm thì xuất -1
        cout << "-1";
    }

    return 0;
}
 

iceghost

Cựu Mod Toán
Thành viên
TV BQT xuất sắc nhất 2016
20 Tháng chín 2013
5,018
7,484
941
TP Hồ Chí Minh
Đại học Bách Khoa TPHCM
@Nguyễn Trần Phát
Bài này chưa hoàn thiện, mình chỉ mới viết hàm và test thử, bạn có thể sử dụng để áp dụng vào bài.
* Bài này hình như mình đọc đề không hiểu rõ hoặc đáp án của đề bị sai. Mình ra 2 9 18 mà đề là 2 2 18.
Bài này bạn cần lưu ý phần đổi tiền là là được.
Mã:
#include<iostream>
using namespace std;

void doiTien(int &g, int &s, int &k) {
    while (s >= 17 || k >= 29) {

        if (s >= 17) {
            s -= 17;
            g++;
        }

        else if (k >= 29) {
            k -= 29;
            s++;
        }
    }
}

//Tiền còn lại gồm 6 tham số: g,s,k là các đồng tiền. p,q,r là giá tiền tương ứng với các g,s,k
void tienConLai(int& g, int& s, int& k, const int& p, const int& q, const int& r) {
    g -= p;

    if (s - q < 0) {
        s = g * 17 + s - q; // Đổi tiền từ đồng g sang đồng s rồi trừ cho giá
    }
    else {
        s -= q;
    }

    if (k - r < 0) {
        k = s * 29 + k - r;// Đổi tiền từ đồng s sang đồng k rồi trừ cho giá
    }
    else {
        k -= r;
    }
}

int main() {
    int g = 5; //Đồng Galeon
    int s = 16;// Đồng Sikel
    int k = 10;//Đồng Knat

    tienConLai(g, s, k, 3, 9, 21);//Trừ tiền món 1
    tienConLai(g, s, k, 0, 4, 0);// Trừ tiền món 2

    doiTien(g, s, k);//Đổi lại tiền

    if (g >= 0 && s >= 0 && k >= 0) {//Kiểm tra xem có cái nào âm không, nếu dương thì xuất tiền
        cout << "Tien g: " << g << endl;
        cout << "Tien s: " << s << endl;
        cout << "Tien k: " << k << endl;
    }
    else {// Nếu âm thì xuất -1
        cout << "-1";
    }

    return 0;
}

Nếu bạn chưa học hàm bạn có thể tham khảo đoạn code sau, hơi dài dòng
Mã:
int main() {
    int g = 5; //Đồng Galeon
    int s = 16;// Đồng Sikel
    int k = 10;//Đồng Knat
    int p1 = 3, q1 = 9, r1 = 21;
    int p2 = 0, q2 = 4, r2 = 0;

    g -= p1;

    if (s - q1 < 0) {
        s = g * 17 + s - q1; // Đổi tiền từ đồng g sang đồng s rồi trừ cho giá
    }
    else {
        s -= q1;
    }

    if (k - r1 < 0) {
        k = s * 29 + k - r1;// Đổi tiền từ đồng s sang đồng k rồi trừ cho giá
    }
    else {
        k -= r1;
    }

    g -= p2;

    if (s - q2 < 0) {
        s = g * 17 + s - q2; // Đổi tiền từ đồng g sang đồng s rồi trừ cho giá
    }
    else {
        s -= q2;
    }

    if (k - r2 < 0) {
        k = s * 29 + k - r2;// Đổi tiền từ đồng s sang đồng k rồi trừ cho giá
    }
    else {
        k -= r2;
    }

    //Doi tien
    while (s >= 17 || k >= 29) {

        if (s >= 17) {
            s -= 17;
            g++;
        }

        else if (k >= 29) {
            k -= 29;
            s++;
        }
    }

    if (g >= 0 && s >= 0 && k >= 0) {//Kiểm tra xem có cái nào âm không, nếu dương thì xuất tiền
        cout << "Tien g: " << g << endl;
        cout << "Tien s: " << s << endl;
        cout << "Tien k: " << k << endl;
    }
    else {// Nếu âm thì xuất -1
        cout << "-1";
    }

    return 0;
}
Bạn viết sai chỗ nào rồi chăng. Mình vẫn ra 2 2 18
Code Python:
Mã:
def moneyToKnat(galeon, sikel, knat):
    return (galeon * 17 + sikel) * 29 + knat

def knatToMoney(knat):
    return (knat // 29 // 17, knat // 29 % 17, knat % 29)

def rawToKnat(raw):
    coins = list(map(int, raw.split()))
    return moneyToKnat(coins[0], coins[1], coins[2])

if __name__ == '__main__':
    with open('MONEY.INP', 'r') as file:
        budget = rawToKnat(file.readline())
        numOfItems = int(file.readline())
        for _ in range(0, numOfItems):
            cost = rawToKnat(file.readline())
            budget = budget - cost
    with open('MONEY.OUT', 'w') as file:
        if budget >= 0:
            file.write("{} {} {}".format(*knatToMoney(budget)))
        else:
            file.write("-1")
 
  • Like
Reactions: Lê Văn Đông

Lê Văn Đông

Học sinh tiến bộ
Thành viên
17 Tháng mười 2015
1,422
1,477
244
TP Hồ Chí Minh
ᴳᵒᵈ乡bőýfŕíéńd
@iceghost
à đúng là mình bị nhầm lẫn, ở phần thiếu tiền, cần đổi tiền lớn hơn thì mình quên cho nó = 0 sau khi đổi. Mình tính tay mà vẫn sai bước này.
Mã:
#include<iostream>
using namespace std;

void doiTien(int& g, int& s, int& k) {
    while (s >= 17 || k >= 29) {

        if (s >= 17) {
            s -= 17;
            g++;
        }

        else if (k >= 29) {
            k -= 29;
            s++;
        }
    }
}

//Tiền còn lại gồm 6 tham số: g,s,k là các đồng tiền. p,q,r là giá tiền tương ứng với các g,s,k
void tienConLai(int& g, int& s, int& k, const int& p, const int& q, const int& r) {
    g -= p;

    if (s - q < 0) {
        s = g * 17 + s - q; // Đổi tiền từ đồng g sang đồng s rồi trừ cho giá
        g = 0; //Cập nhật <= Vì đổi hết tiền sang s rồi, nên g phải = 0
    }
    else {
        s -= q;
    }

    if (k - r < 0) {
        k = s * 29 + k - r;// Đổi tiền từ đồng s sang đồng k rồi trừ cho giá
        s = 0; // Cập nhật
    }
    else {
        k -= r;
    }
}

int main() {
    int g = 5; //Đồng Galeon
    int s = 16;// Đồng Sikel
    int k = 10;//Đồng Knat

    tienConLai(g, s, k, 3, 9, 21);//Trừ tiền món 1
    tienConLai(g, s, k, 0, 4, 0);// Trừ tiền món 2

    doiTien(g, s, k);//Đổi lại tiền

    if (g >= 0 && s >= 0 && k >= 0) {//Kiểm tra xem có cái nào âm không, nếu dương thì xuất tiền
        cout << "Tien g: " << g << endl;
        cout << "Tien s: " << s << endl;
        cout << "Tien k: " << k << endl;
    }
    else {// Nếu âm thì xuất -1
        cout << "-1";
    }

    return 0;
}
 

System32

Học sinh chăm học
Thành viên
25 Tháng chín 2018
343
348
76
Hà Nội
THPT Marie Curie
Mọi người giúp em bài này với ạ. Ngôn ngữ nào cũng được nha
Python
Mã:
money = list(map(int, input().split()))

for i in range(int(input())):
    price = list(map(int, input().split()))
    money = list(map(lambda x, y: x - y, money, price))

knat = money[0] * 17 * 29 + money[1] * 29 + money[2]
print("{} {} {}".format(knat // 29 // 17, knat // 29 % 17, knat % 29) if knat >= 0 else -1)
 
Top Bottom