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

พิมพ์องค์ประกอบที่สามารถบวกกันได้เพื่อให้ผลรวมที่กำหนด

รับจำนวนองค์ประกอบที่ผู้ใช้ต้องการป้อน แล้วรับค่ารวมที่ต้องการคำนวณจากรายการองค์ประกอบที่กำหนด

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 - เลือกค่าตามลำดับที่รับเข้ามา หากผลรวมลบค่านั้นไม่ติดลบ จะนำค่านั้นไปใช้ ไม่ได้ค้นหาทุกชุดที่เป็นไปได้