รับจำนวนองค์ประกอบที่ผู้ใช้ต้องการป้อน แล้วรับค่ารวมที่ต้องการคำนวณจากรายการองค์ประกอบที่กำหนด
Input : N=5 Enter any 5 values : 3 1 6 5 7 Enter sum you want to check : 10 Output : 3 1 6
อัลกอริทึม
START
STEP1 -> รับค่าจากผู้ใช้
STEP2 -> รับผลรวมที่ผู้ใช้ต้องการตรวจสอบ
STEP3 -> For i = 0; i < n; i++
STEP4 -> ตรวจสอบ If sum - *(ptr+i) >= 0 แล้ว
STEP4.1 -> sum -= *(ptr+i)
STEP4.2 -> พิมพ์ค่า *(ptr+i)
END If
END For
STOP
ตัวอย่างโค้ด (C)
#include#include int main(int argc, char const *argv[]) { int *ptr, n, i, sum; printf("Enter number of digits you want to enter\n"); scanf("%d", &n); ptr = (int*)malloc(sizeof(int)*n); // จองหน่วยความจำแบบไดนามิก printf("Enter %d elements\n", n); for(i = 0; i < n; i++) { scanf("%d", (ptr+i)); // รับค่าในอาร์เรย์ที่จองไว้ } printf("Enter the sum you want to check\n"); scanf("%d", &sum); for (i = 0; i < n; i++) { if(sum - *(ptr+i) >= 0) { // ตรวจสอบค่าที่บวกกันได้เป็นผลรวม sum -= *(ptr+i); // อัปเดตค่าผลรวม printf("%d ", *(ptr+i)); // พิมพ์ค่าที่บวกกันได้เป็นผลรวม } } return 0; }
ผลลัพธ์
หากรันโปรแกรมข้างต้นจะได้ผลลัพธ์ดังนี้:
Enter number of digits you want to enter 5 Enter 5 elements 3 1 6 5 7 Enter the sum you want to check 10 3 1 6
📝 หมายเหตุ: อัลกอริทึมนี้เป็นแบบ Greedy - เลือกค่าตามลำดับที่รับเข้ามา หากผลรวมลบค่านั้นไม่ติดลบ จะนำค่านั้นไปใช้ ไม่ได้ค้นหาทุกชุดที่เป็นไปได้