חלוקה שווה של מערך

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

דוגמאות:

  • עבור המערך הבא:
012345
-351214-913

יוחזר true כי -3 + 5 + 14 = 12 + -9 + 13 וגם בכל קבוצה יש 3 איברים.

  • עבור המערך הבא:
012345
-35-1214-913

יוחזר false כי אומנם -3 + 5 + 14 + -12 = -9 + 13 אבל מספר האיברים בשתי הקבוצות שונה (כלומר יש ארבעה איברים בקבוצה אחת ורק שניים).

  • עבור המערך הבא:
01234
-35-1214-9

יוחזר false כי אין חלוקה של איברי המערך לשתי קבוצות שוות בגודלן.

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

אילוצים:

המערך אינו null ואינו ריק.

אין לשנות את תוכן המערך (אפילו לא זמנית), ולא להשתמש במערך עזר.

דוגמה 1:
קלט:
arr = [-3, 5, 12, 14, -9, 13]
פלט:
true

הסבר: ניתן לחלק את המערך לשתי קבוצות שוות בגודלן ובסכומן: {-3, 5, 14} ו-{12, -9, 13}.

דוגמה 2:
קלט:
arr = [-3, 5, -12, 14, -9, 13]
פלט:
false

הסבר: לא ניתן לחלק את המערך לשתי קבוצות שוות בגודלן ובסכומן.

דוגמה 3:
קלט:
arr = [-3, 5, -12, 14, -9]
פלט:
false

הסבר: לא ניתן לחלק את המערך לשתי קבוצות שוות בגודלן ובסכומן.

דוגמה 4:
קלט:
arr = [1, 1, 1, 1, 1, 1]
פלט:
true

הסבר: ניתן לחלק את המערך לשתי קבוצות שוות בגודלן ובסכומן: {1, 1, 1} ו-{1, 1, 1}.

דוגמה 5:
קלט:
arr = [10, -10, 5, 5]
פלט:
false

הסבר: לא ניתן לחלק את המערך לשתי קבוצות שוות בגודלן ובסכומן.

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

הסבר: לא ניתן לחלק את המערך לשתי קבוצות שוות בגודלן ובסכומן.

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

הסבר: לא ניתן לחלק את המערך לשתי קבוצות שוות בגודלן ובסכומן.

דוגמה 8:
קלט:
arr = [2, 2, 2, 2, 2, 2, 2, 2]
פלט:
true

הסבר: ניתן לחלק את המערך לשתי קבוצות שוות בגודלן ובסכומן: {2, 2, 2, 2} ו-{2, 2, 2, 2}.

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

קלט:

arr = [-3, 5, 12, 14, -9, 13]

הפלט המבוקש:

true