Skip to content
Related Articles

Related Articles

Improve Article
Save Article
Like Article

Find a pair with sum N having minimum absolute difference

  • Last Updated : 19 Mar, 2021

Given an integer N, the task is to find a distinct pair of X and Y such that X + Y = N and abs(X – Y) is minimum.

Examples:

Attention reader! All those who say programming isn't for kids, just haven't met the right mentors yet. Join the  Demo Class for First Step to Coding Coursespecifically designed for students of class 8 to 12. 

The students will get to learn more about the world of programming in these free classes which will definitely help them in making a wise career choice in the future.

Input: N = 11
Output: 5 6 
Explanation:
X = 5 and Y = 6 satisfy the given equation. 
Therefore, the minimum absolute value of abs(X – Y) = 1.



Input: N = 12 
Output: 5 7

Naive Approach: The simplest approach to solve this problem is to generate all possible values of X and Y with a sum equal to N and print the value of X and Y which gives the minimum absolute value of abs(X – Y).

Time Complexity: O(N2
Auxiliary Space: O(1)

Efficient Approach: The above approach can be optimized based on the following observations:

If N % 2 == 1, then pairs (N / 2) and (N / 2 + 1) have minimum absolute difference. 
Otherwise, pairs (N / 2 – 1) and (N / 2 + 1) will have the minimum absolute difference.

Follow the steps below to solve the problem:

  • Check if N is odd or not. If found to be true, then print the floor value of (N / 2) and (N / 2 + 1) as the required answer.
  • Otherwise, print the value of (N / 2 – 1) and (N / 2 + 1).

Below is the implementation of the above approach:

C++




// C++ program to implement
// the above approach
#include <bits/stdc++.h>
using namespace std;
 
// Function to find the value of X and Y
// having minimum value of abs(X - Y)
void findXandYwithminABSX_Y(int N)
{
    // If N is an odd number
    if (N % 2 == 1) {
        cout << (N / 2) << " " << (N / 2 + 1);
    }
 
    // If N is an even number
    else {
        cout << (N / 2 - 1) << " " << (N / 2 + 1);
    }
}
 
// Driver Code
int main()
{
    int N = 12;
    findXandYwithminABSX_Y(N);
}

Java




// Java program to implement
// the above approach
import java.util.*;
class GFG {
 
    // Function to find the value
    // of X and Y having minimum
    // value of Math.abs(X - Y)
    static void findXandYwithminABSX_Y(int N)
    {
        // If N is an odd number
        if (N % 2 == 1) {
            System.out.print((N / 2) + " " + (N / 2 + 1));
        }
 
        // If N is an even number
        else {
            System.out.print((N / 2 - 1) + " "
                             + (N / 2 + 1));
        }
    }
 
    // Driver Code
    public static void main(String[] args)
    {
        int N = 12;
        findXandYwithminABSX_Y(N);
    }
}
 
// This code is contributed by gauravrajput1

Python3




# Python3 program to implement
# the above approach
 
# Function to find the value of X and Y
# having minimum value of abs(X - Y)
 
 
def findXandYwithminABSX_Y(N):
 
    # If N is an odd number
    if (N % 2 == 1):
        print((N // 2), (N // 2 + 1))
 
    # If N is an even number
    else:
        print((N // 2 - 1), (N // 2 + 1))
 
 
# Driver Code
if __name__ == '__main__':
 
    N = 12
 
    findXandYwithminABSX_Y(N)
 
# This code is contributed by mohit kumar 29

C#




// C# program to implement
// the above approach
using System;
class GFG {
 
    // Function to find the value
    // of X and Y having minimum
    // value of Math.abs(X - Y)
    static void findXandYwithminABSX_Y(int N)
    {
        // If N is an odd number
        if (N % 2 == 1) {
            Console.Write((N / 2) + " " + (N / 2 + 1));
        }
 
        // If N is an even number
        else {
            Console.Write((N / 2 - 1) + " " + (N / 2 + 1));
        }
    }
 
    // Driver Code
    public static void Main()
    {
        int N = 12;
        findXandYwithminABSX_Y(N);
    }
}
 
// This code is contributed by bgangwar59

PHP




<?php
   
function findXandYwithminABSX_Y($N){
   
    // If N is an odd number
    if ($N % 2 == 1)
  {
    return ($N / 2) . " " . ($N / 2 + 1);
  }
  
  // If N is an even number
  else
  {
    return ($N /2 -1) . " " . ($N / 2 + 1);
  }
   
   
}
 
   
// Driver code  
$N = 12;
echo(findXandYwithminABSX_Y($N));
 
   
?>

Javascript




<script>
 
// JavaScript program to implement the above approach
 
// Function to find the value of X and Y
// having minimum value of abs(X - Y)
function findXandYwithminABSX_Y(N)
{
 
    // If N is an odd number
    if (N % 2 == 1)
    {
        document.write((N / 2) + " " + (N / 2 + 1));
    }
 
    // If N is an even number
    else
    {
        document.write((N / 2 - 1) + " " + (N / 2 + 1));
    }
}
 
 
// Driver Code
 
    let N = 12;
    findXandYwithminABSX_Y(N);
     
    // This code is contributed by susmitakundugoaldanga.
</script>
Output: 
5 7

 

Time Complexity: O(1)
Auxiliary Space: O(1)




My Personal Notes arrow_drop_up
Recommended Articles
Page :