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

พิมพ์ Combinations ของ N องค์ประกอบโดยเปลี่ยนเครื่องหมายให้ผลรวมหาร M ลงตัวใน C++

ในปัญหานี้ เราจะได้รับ array ของ N องค์ประกอบ และต้องหา combinations ของผลรวมขององค์ประกอบที่หารด้วยจำนวนเต็ม M ลงตัว

Input: array = {4, 7, 3} ; M = 3
Output: 5+4+3 ; 5+4-3

เพื่อแก้ปัญหานี้ เราต้องรู้แนวคิดของ power set ที่ใช้หา ผลรวมที่เป็นไปได้ทั้งหมด จากผลรวมนี้ ให้พิมพ์เฉพาะที่หาร M ลงตัว

อัลกอริทึม

ขั้นตอนที่ 1: วนลูปทุก combinations ของ '+' และ '-' โดยใช้ power set
ขั้นตอนที่ 2: ถ้า sum combination หาร M ลงตัว ให้พิมพ์พร้อมเครื่องหมาย

โปรแกรมตัวอย่าง

#include <iostream>
using namespace std;

void printDivisibleSum(int a[], int n, int m) {
    for (int i = 0; i < (1 << n); i++) {
        int sum = 0;
        int num = 1 << (n - 1);
        for (int j = 0; j < n; j++) {
            if (i & num)
                sum += a[j];
            else
                sum += (-1 * a[j]);
            num = num >> 1;
        }
        if (sum % m == 0) {
            num = 1 << (n - 1);
            for (int j = 0; j < n; j++) {
                if ((i & num))
                    cout << "+ " << a[j] << " ";
                else
                    cout << "- " << a[j] << " ";
                num = num >> 1;
            }
            cout << endl;
        }
    }
}

int main() {
    int arr[] = {4, 7, 3};
    int n = sizeof(arr) / sizeof(arr[0]);
    int m = 3;
    cout << "The sum combination divisible by n :\n";
    printDivisibleSum(arr, n, m);
    return 0;
}

ผลลัพธ์

The sum combination is divisible by n -

- 4 + 7 - 3
- 4 + 7 + 3
+ 4 - 7 - 3
+ 4 - 7 + 3