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

พิมพ์จำนวนเต็มที่แตกต่างกันทั้งหมดที่สามารถสร้างได้จากตัวเลข K จากอาร์เรย์ของตัวเลข N ใน C++


ในปัญหานี้ เราได้รับอาร์เรย์ของจำนวนเต็ม N และจำนวน K หน้าที่ของเราคือพิมพ์ตัวเลขที่แตกต่างกันทั้งหมดที่สามารถสร้างได้โดยการเพิ่มองค์ประกอบ K ใดๆ จากอาร์เรย์ ในขณะที่เลือกหมายเลขใด ๆ สามารถทำซ้ำได้ K ครั้ง

มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากัน −

Input: array = {2, 5, 13, 9} K = 2
Output: 2,7,15,11,10,18,14,26,22
Explaination: 2 elements added :
2+2=4, 2+5=7, 2+13=15, 2+9=11, 5+5=10, 5+13=18, 5+9=14, 13+13=26, 13+9=22, 9+9=18

เพื่อแก้ปัญหานี้ เราจะหาการรวมกันขององค์ประกอบ k จากอาร์เรย์ สำหรับสิ่งนี้ เราจะใช้การเรียกซ้ำซึ่งจะถูกเรียกซ้ำเพื่อสร้างตัวเลข เพื่อหลีกเลี่ยงค่าที่ซ้ำกัน เราจะเก็บตัวเลขไว้ในชุด

ตัวอย่าง

รหัสจะแสดงการใช้งานโซลูชันของเรา -

#include <bits/stdc++.h>
using namespace std;
set<int> distNumbers;
void generateNumberFromArray(int count, int arr[], int n, int num, int k) {
   if (k == count) {
      distNumbers.insert(num);
      return;
   }
   for (int i = 0; i < n; i++) {
      generateNumberFromArray(count + 1, arr, n, num + arr[i], k);
   }
}
void printDistinctIntegers(int k, int arr[], int n) {
   generateNumberFromArray(0, arr, n, 0, k);
   cout<<"The "<<distNumbers.size()<<" distinct integers are:\n";
   while (!distNumbers.empty()) {
      cout << *distNumbers.begin() <<"\t";
      distNumbers.erase(*distNumbers.begin());
   }
}
int main() {
   int arr[]={ 2, 5, 13, 9 };
   int n=4;
   int k=2;
   printDistinctIntegers(k, arr, n);
   return 0;
}

ผลลัพธ์

The 9 distinct integers are −
4 7 10 11 14 15 18 22 26