Closest sum partition (into two subsets) of numbers from 1 to n

• Last Updated : 11 May, 2021

Given an integer sequence 1, 2, 3, 4, …, n. The task is to divide it into two sets A and B in such a way that each element belongs to exactly one set and |sum(A) – sum(B)| is the minimum possible. Print the value of |sum(A) – sum(B)|.
Examples:

Input:
Output:
A = {1, 2} and B = {3} ans |sum(A) – sum(B)| = |3 – 3| = 0.
Input:
Output:
A = {1, 3, 4} and B = {2, 5} ans |sum(A) – sum(B)| = |3 – 3| = 0.
Input:
Output:

Approach: Take mod = n % 4

1. If mod = 0 or mod = 3 then print 0.
2. If mod = 1 or mod = 2 then print 1.

This is because the groups will be chosen as A = {N, N – 3, N – 4, N – 7, N – 8, …..}, B = {N – 1, N – 2, N – 5, N – 6, …..}
Starting from N to 1, place 1st element in group A then alternate every 2 elements in B, A, B, A, …..

• When n % 4 = 0: N = 8, A = {1, 4, 5, 8} and B = {2, 3, 6, 7}
• When n % 4 = 1: N = 9, A = {1, 4, 5, 8, 9} and B = {2, 3, 6, 7}
• When n % 4 = 2: N = 10, A = {1, 4, 5, 8, 9} and B = {2, 3, 6, 7, 10}
• When n % 4 = 3: N = 11, A = {1, 4, 5, 8, 9} and B = {2, 3, 6, 7, 10, 11}

Below is the implementation of the above approach:

C++

 // C++ implementation of the approach#include using namespace std; // Function to return the minimum required// absolute differenceint minAbsDiff(int n){    int mod = n % 4;     if (mod == 0 || mod == 3)        return 0;     return 1;} // Driver codeint main(){    int n = 5;    cout << minAbsDiff(n);     return 0;}

Java

 // Java implementation of the approachclass GFG{     // Function to return the minimum required// absolute difference     static int minAbsDiff(int n)    {        int mod = n % 4;        if (mod == 0 || mod == 3)        {            return 0;        }        return 1;    }     // Driver code    public static void main(String[] args)    {        int n = 5;        System.out.println(minAbsDiff(n));    }} // This code is contributed by Rajput-JI

Python 3

 # Python3 implementation of the approach # Function to return the minimum required# absolute differencedef minAbsDiff(n) :    mod = n % 4;     if (mod == 0 or mod == 3) :        return 0;     return 1; # Driver codeif __name__ == "__main__" :     n = 5;    print(minAbsDiff(n))     # This code is contributed by Ryuga

C#

 // C# implementation of the// above approachusing System; class GFG{             // Function to return the minimum     // required absolute difference    static int minAbsDiff(int n)    {        int mod = n % 4;        if (mod == 0 || mod == 3)        {            return 0;        }        return 1;    }     // Driver code    static public void Main ()    {        int n = 5;        Console.WriteLine(minAbsDiff(n));    }} // This code is contributed by akt_mit



Javascript


Output:
1

My Personal Notes arrow_drop_up