เราได้รับอาร์เรย์ของจำนวนเต็ม งานคือการหาองค์ประกอบที่มีค่าน้อยที่สุดและมากที่สุดของอาร์เรย์ด้วยจำนวนการเปรียบเทียบน้อยที่สุด
ตัวอย่าง
อินพุต
Arr[] = { 1, 2, 4, 5, -3, 91 }
เอาต์พุต
ค่าสูงสุด: 91 ค่าต่ำสุด: -3
คำอธิบาย — เพื่อลดจำนวนการเปรียบเทียบ เราจะกำหนดค่าเริ่มต้นให้ค่าสูงสุดและต่ำสุดเป็น Arr[0] จากนั้นเริ่มจากองค์ประกอบที่ 2 เปรียบเทียบแต่ละค่ากับค่าต่ำสุดและสูงสุด แล้วอัปเดตตามนั้น
อินพุต
Arr[] = { 10, 20, 21, 31, 18, 11 }
เอาต์พุต
ค่าสูงสุด: 31 ค่าต่ำสุด: 10
วิธีการที่ใช้ในโปรแกรม
- รับอาร์เรย์จำนวนเต็มเป็น Arr[]
- ฟังก์ชัน getresult(int arr[], int n) ใช้หาค่าสูงสุดและต่ำสุดในอาร์เรย์ด้วยการเปรียบเทียบน้อยที่สุด
- ถ้ามีเพียงองค์ประกอบเดียว ให้กำหนดตัวแปร max และ min เป็น arr[0]
- ถ้ามีมากกว่าหนึ่งองค์ประกอบ ให้กำหนด max เป็น arr[1] และ min เป็น arr[0]
- ในลูป for เริ่มวนจากองค์ประกอบที่ 3 (i=2) จนถึงตัวสุดท้าย
- เปรียบเทียบแต่ละค่า (arr[i]) กับ min และ max หากน้อยกว่า min ให้อัปเดต min หากมากกว่า max ให้อัปเดต max
- สุดท้ายพิมพ์ผลลัพธ์ที่เก็บอยู่ในตัวแปร max และ min
ตัวอย่างโค้ด
#include <stdio.h>
#include <math.h>
int getresult(int arr[], int n) {
int min = 0, max = 0;
/* ถ้ามีเพียงองค์ประกอบเดียว ให้คืนค่าเป็น min และ max ทั้งคู่ */
if (n == 1) {
min = max = arr[0];
}
/* ถ้ามีมากกว่าหนึ่งองค์ประกอบ ให้กำหนดค่าเริ่มต้น min และ max */
if (arr[0] > arr[1]) {
max = arr[0];
min = arr[1];
} else {
max = arr[1];
min = arr[0];
}
for (int i = 2; i < n; i++) {
if (arr[i] > max)
max = arr[i];
else if (arr[i] < min)
min = arr[i];
}
printf("ค่าต่ำสุด: %d", min);
printf("ค่าสูงสุด: %d", max);
}
/* โปรแกรมหลักเพื่อทดสอบฟังก์ชันข้างต้น */
int main() {
int arr[] = {200, 191, 112, -11, 330, 60};
int n = 6;
getresult(arr, n);
return 0;
}
ผลลัพธ์
หากรันโค้ดข้างต้นจะได้ผลลัพธ์ดังนี้ —
ค่าต่ำสุด: -11 ค่าสูงสุด: 330