Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม C

เงินสูงสุดที่ถอนได้ในสองขั้นตอนในภาษา C

เราได้รับตู้เซฟสองตู้ คือ L1 และ L2 ที่มีเงินในรูปเหรียญ L1 มีเหรียญ A เหรียญ และ L2 มีเหรียญ B เหรียญ เราต้องถอนเงินหรือเหรียญจากตู้เซฟให้ได้เงินสูงสุด ทุกครั้งที่ถอนเหรียญจากตู้ใดตู้หนึ่ง จะถูกแทนที่ด้วยเหรียญน้อยกว่าจำนวนเดิม 1 เหรียญ หากถอน A เหรียญจาก L1 จะถูกแทนที่ด้วย A-1 เหรียญ และหากถอน B เหรียญจาก L2 จะถูกแทนที่ด้วย B-1 เหรียญ งานคือเพิ่มเงินที่ถอนได้สูงสุดในสองขั้นตอน นั่นคือสามารถถอนได้เพียงสองครั้งเท่านั้น

ตัวอย่าง

อินพุต — L1: 10, L2: 11

เอาต์พุต — เงินสูงสุดที่ถอนได้ในสองขั้นตอน — 21

คำอธิบาย — ขั้นตอนที่ 1 ถอน 11 เหรียญจาก L2, L2 จะกลายเป็น 11-1=10 เหรียญ

ขั้นตอนที่ 2 L1 และ L2 ทั้งคู่มี 10 เหรียญ จึงถอนจากตู้ไหนก็ได้ และเรามี 11+10=21 เหรียญ ซึ่งเป็นค่าสูงสุด

อินพุต — L1: 5, L2: 5

เอาต์พุต — เงินสูงสุดที่ถอนได้ในสองขั้นตอน — 10

วิธีการที่ใช้ในโปรแกรม

  • มีตู้เซฟ L1 และ L2 เป็นจำนวนเต็มที่มีเหรียญ
  • ฟังก์ชัน maxMoney(int A, int B) รับจำนวนเหรียญในตู้เซฟ
  • ใน maxMoney() ใช้ตัวแปร 'money' เก็บจำนวนเงินสูงสุด
  • เริ่มต้น money รับค่าจาก A หรือ B ตัวไหนมากกว่า (money = A > B ? A : B)
  • เปรียบเทียบค่า money กับ A หรือ B เพื่อเช็คว่าถอนจากตู้ไหน
  • แทนที่ตู้นั้นด้วยจำนวนน้อยกว่าเดิม 1 (A-- หรือ B--)
  • อีกครั้ง money จะบวกค่าจาก A หรือ B ตัวไหนมากกว่า (money += A > B ? A : B)

ตัวอย่างโค้ด

#include <stdio.h>
#include <math.h>

// ฟังก์ชันคืนค่าเหรียญสูงสุดที่ได้
int maxMoney(int A, int B) {
    // ถอนเหรียญ
    int money = A > B ? A : B;
    // เติมตู้เซฟด้วยเหรียญน้อยกว่า 1
    if (money == A)
        A--;
    else
        B--;
    // ถอนอีกครั้ง
    money += A > B ? A : B;
    return money;
}

// โค้ดหลัก
int main() {
    int L1 = 8, L2 = 9;
    printf("เงินสูงสุดที่ถอนได้ในสองขั้นตอน: %d", maxMoney(L1, L2));
    return 0;
}

ผลลัพธ์

หากรันโค้ดข้างต้นจะได้ผลลัพธ์ดังนี้ —

เงินสูงสุดที่ถอนได้ในสองขั้นตอน: 17