คำอธิบายปัญหา
สมมติว่ามีอุโมงค์สูง 41 หน่วย และกว้างมาก กล่องจะผ่านได้ถ้าความสูงของกล่องน้อยกว่า 41 อย่างเคร่งครัด เราต้องหาปริมาตรรวมของกล่องที่ผ่านได้ ปริมาตร = ยาว × กว้าง × สูง มีจำนวนกล่อง N และอาร์เรย์ 2 มิติ N แถว 3 คอลัมน์
ตัวอย่าง
หากอินพุตเป็น N = 4, boxes = [[9,5,20], [3,7,15], [8,15,41], [6,3,42]] ผลลัพธ์จะเป็น 900 และ 315 เพราะกล่อง 2 อันแรกผ่านได้ ปริมาตรคือ 9×5×20=900 และ 3×7×15=315 กล่องอีก 2 อันสูงเกินไป
ขั้นตอนการแก้ปัญหา
- กำหนดโครงสร้าง Box มี length, width, height
- ฟังก์ชัน volume() คืนค่า length × width × height
- ฟังก์ชัน lower() คืนค่า true ถ้า height < 41
- วนลูปตรวจสอบทุกกล่อง ถ้า lower() เป็น true ให้พิมพ์ volume()
โค้ดตัวอย่าง
#include <stdio.h>
#define N 4
struct Box {
int length, width, height;
};
int volume(struct Box box) {
return box.length * box.width * box.height;
}
int lower(struct Box box) {
return box.height < 41;
}
int solve(struct Box boxes[]) {
for (int i = 0; i < N; i++)
if (lower(boxes[i]))
printf("%d\n", volume(boxes[i]));
}
int main() {
struct Box boxes[N] = {{9,5,20}, {3,7,15}, {8,15,41}, {6,3,42}};
solve(boxes);
return 0;
}
อินพุต
4, {{9,5,20},{3,7,15},{8,15,41},{6,3,42}}
เอาต์พุต
900 315