בדיקת ביטויים חשבוניים במערך

נתון מערך חד-ממדי arr שערכיו הם מספרים שלמים חיוביים ממש. ומספר שלם num, יש לבדוק אם אפשר להגיע למספר num על ידי חיבור וחיסור חלק מהמספרים במערך arr, ובכמה אופנים.

לדוגמה, אם המערך arr הוא להלן והמספר num הוא 4,

0123
1362

אפשר להגיע למספר 4 כך:

  • +3 +1 = 4
  • +6 -3 +1 = 4
  • +2 +3 -1 = 4
  • +2 +6 -3 -1 = 4
  • -2 +6 = 4

כלומר, יש כאן 5 ביטויים שונים עם פעולות חיבור וחיסור בלבד, שמערבים את איברי המערך arr ותוצאותיהם הם המספר num = 4. שימו לב, כל ביטוי נספר פעם אחת, ולא סופרים את הביטויים שמשתמשים בחוק החילוף. כלומר, אם ספרנו את הביטוי +3 +1 לא נספור את הביטוי +1 +3.

בהינתן מערך arr של שלמים חיוביים ממש, ומספר שלם num, יש להחזיר את מספר הביטויים השונים שמשתמשים בפעולות חיבור וחיסור על איברי המערך (לא בהכרח כולם), ומגיעים לתוצאה num. ולהדפיס את הביטויים האלה, ההדפסה תכלול את המספר השלם והסימן פלוס (+) או מינוס (-) שלפניו, ורווח לאחריו.

השיטה צריכה להיות רקורסיבית ללא שימוש בלולאות כלל. כך גם כל שיטות העזר (אם תכתבו) לא יכולות להכיל לולאות.

אילוצים:

יש להדפיס את הביטויים החשבוניים וגם להחזיר את מספרם.

דוגמה 1:
קלט:
arr = [1, 3, 6, 2],
num = 4
פלט:
+1 +3 
+1 -3 +6 
-1 +3 +2 
-1 -3 +6 +2 
+6 -2 
5

הסבר: ישנם 5 ביטויים שונים שמגיעים ל-4.

דוגמה 2:
קלט:
arr = [2, 1, 6, 3],
num = 3
פלט:
+2 +1 
-2 -1 +6 
+6 -3 
+3 
4

הסבר: ישנם 4 ביטויים שונים שמגיעים ל-3.

דוגמה 3:
קלט:
arr = [5, 5, 5],
num = 5
פלט:
+5 +5 -5 
+5 -5 +5 
+5 
-5 +5 +5 
+5 
+5 
6

הסבר: ישנם 6 ביטויים שונים שמגיעים ל-5.

דוגמה 4:
קלט:
arr = [1, 2, 3],
num = 6
פלט:
+1 +2 +3
1

הסבר: יש ביטוי אחד שמגיע ל-6: +1 +2 +3.

דוגמה 5:
קלט:
arr = [1, 2, 3],
num = 0
פלט:
+1 +2 -3 
-1 -2 +3 
2

הסבר: ישנם 3 ביטויים שונים שמגיעים ל-0 כולל ביטוי ריק.

דוגמה 6:
קלט:
arr = [10, 20, 30],
num = 10
פלט:
+10 
-10 +20 
-20 +30 
3

הסבר: ישנם 3ביטויים שונים שמגיעים ל-10.

דוגמה 7:
קלט:
arr = [4, 4, 4, 4],
num = 8
פלט:
+4 +4 +4 -4 
+4 +4 -4 +4 
+4 +4 
+4 -4 +4 +4 
+4 +4 
+4 +4 
-4 +4 +4 +4 
+4 +4 
+4 +4 
+4 +4 
10

הסבר: ישנם 10 ביטויים שונים שמגיעים ל-8.

דוגמה 8:
קלט:
arr = [7, 1, 2, 9],
num = 3
פלט:
-7 +1 +9 
-7 -1 +2 +9 
+1 +2 
3

הסבר: ישנם 3 ביטויים שונים שמגיעים ל-3.

Loading...
נשמרLn 1, Col 1

קלט:

arr = [1, 3, 6, 2],
num = 4

הפלט המבוקש:

+1 +3 
+1 -3 +6 
-1 +3 +2 
-1 -3 +6 +2 
+6 -2 
5