Given ‘N’ which represent the regular N sided polygon. Two children are standing on the vertex ‘A’ and ‘B’ of this Regular N sided polygon. The task is to determine the number of that vertex another person should stand on so that the sum of the minimum jumps required to reach A and minimum jumps required to reach B is minimized.
Note:
- The vertices of this regular polygon are number from 1 to N in a clockwise manner.
- If there are multiple answers, output the least numbered vertex.
Examples:
Input: N = 6, A = 2, B = 4 Output: Vertex = 3 Explanation: The another person should stand on 3rd vertex. As from 3rd vertex, 1 jump is required to reach A and 1 jump is required to reach B. (See figure above) Input: N = 4, A = 1, B = 2 Output: Vertex = 3 Explanation: The another person should stand on 3rd or 4th vertex. But, as mentioned above we have to print least numbered vertex that's why the output is 3.
Approach:
- Simply calculate jumps from each vertex except vertices A and B as on that vertices children are standing and store their sum in sum variable.
- Finally, print that position from where the sum of jumps is minimum.
C++
// C++ implementation of above approach #include <bits/stdc++.h> using namespace std; // Function to find out the // number of that vertices int vertices( int N, int A, int B) { int position = 0; int minisum = INT_MAX; int sum = 0; for ( int i = 1; i <= N; i++) { // Another person can't stand on // vertex on which 2 children stand. if (i == A || i == B) continue ; // calculating minimum jumps from // each vertex. else { int x = abs (i - A); int y = abs (i - B); // Calculate sum of jumps. sum = x + y; if (sum < minisum) { minisum = sum; position = i; } } } return position; } // Driver code int main() { int N = 3, A = 1, B = 2; // Calling function cout << "Vertex = " << vertices(N, A, B); return 0; } |
Java
// Java implementation of above approach class GFG { // Function to find out the // number of that vertices static int vertices( int N, int A, int B) { int position = 0 ; int minisum = Integer.MAX_VALUE; int sum = 0 ; for ( int i = 1 ; i <= N; i++) { // Another person can't stand on // vertex on which 2 children stand. if (i == A || i == B) continue ; // calculating minimum jumps from // each vertex. else { int x = Math.abs(i - A); int y = Math.abs(i - B); // Calculate sum of jumps. sum = x + y; if (sum < minisum) { minisum = sum; position = i; } } } return position; } // Driver code public static void main(String[] args) { int N = 3 , A = 1 , B = 2 ; // Calling function System.out.println( "Vertex = " + vertices(N, A, B)); } } // This code contributed by Rajput-Ji |
Python
# Python3 implementation of above approach # Function to find out the # number of that vertices def vertices(N, A, B): position = 0 miniSum = 10 * * 9 Sum = 0 for i in range ( 1 , N + 1 ): # Another person can't stand on # vertex on which 2 children stand. if (i = = A or i = = B): continue # calculating minimum jumps from # each vertex. else : x = abs (i - A) y = abs (i - B) # Calculate Sum of jumps. Sum = x + y if ( Sum < miniSum): miniSum = Sum position = i return position # Driver code N = 3 A = 1 B = 2 # Calling function print ( "Vertex = " ,vertices(N, A, B)) # This code is contributed by mohit kumar |
C#
// C# implementation of the approach using System; using System.Collections.Generic; class GFG { // Function to find out the // number of that vertices static int vertices( int N, int A, int B) { int position = 0; int minisum = int .MaxValue; int sum = 0; for ( int i = 1; i <= N; i++) { // Another person can't stand on // vertex on which 2 children stand. if (i == A || i == B) continue ; // calculating minimum jumps from // each vertex. else { int x = Math.Abs(i - A); int y = Math.Abs(i - B); // Calculate sum of jumps. sum = x + y; if (sum < minisum) { minisum = sum; position = i; } } } return position; } // Driver code public static void Main(String[] args) { int N = 3, A = 1, B = 2; // Calling function Console.WriteLine( "Vertex = " + vertices(N, A, B)); } } /* This code contributed by PrinciRaj1992 */ |
PHP
<?php // PHP implementation of above approach // Function to find out the // number of that vertices function vertices( $N , $A , $B ) { $position = 0; $minisum = PHP_INT_MAX; $sum = 0; for ( $i = 1; $i <= $N ; $i ++) { // Another person can't stand on // vertex on which 2 children stand. if ( $i == $A || $i == $B ) continue ; // calculating minimum jumps from // each vertex. else { $x = abs ( $i - $A ); $y = abs ( $i - $B ); // Calculate sum of jumps. $sum = $x + $y ; if ( $sum < $minisum ) { $minisum = $sum ; $position = $i ; } } } return $position ; } // Driver code $N = 3; $A = 1; $B = 2; // Calling function echo "Vertex = " ,vertices( $N , $A , $B ); // This code is contributed by Ryuga ?> |
Javascript
<script> // Javascript implementation of above approach // Function to find out the // number of that vertices function vertices(N, A, B) { var position = 0; var minisum = Number.MAX_VALUE; var sum = 0; for ( var i = 1; i <= N; i++) { // Another person can't stand on // vertex on which 2 children stand. if (i == A || i == B) continue ; // calculating minimum jumps from // each vertex. else { var x = Math.abs(i - A); var y = Math.abs(i - B); // Calculate sum of jumps. sum = x + y; if (sum < minisum) { minisum = sum; position = i; } } } return position; } // Driver code var N = 3, A = 1, B = 2; // Calling function document.write( "Vertex = " + vertices(N, A, B)); // This code is contributed by Ankita saini </script> |
Vertex = 3
Time Complexity: O(N)
Auxiliary Space: O(1)
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!