Determine the position of the third person on regular N sided polygon
Last Updated :
08 Jun, 2022
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++
#include <bits/stdc++.h>
using namespace std;
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++) {
if (i == A || i == B)
continue ;
else {
int x = abs (i - A);
int y = abs (i - B);
sum = x + y;
if (sum < minisum) {
minisum = sum;
position = i;
}
}
}
return position;
}
int main()
{
int N = 3, A = 1, B = 2;
cout << "Vertex = " << vertices(N, A, B);
return 0;
}
|
Java
class GFG
{
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++)
{
if (i == A || i == B)
continue ;
else
{
int x = Math.abs(i - A);
int y = Math.abs(i - B);
sum = x + y;
if (sum < minisum)
{
minisum = sum;
position = i;
}
}
}
return position;
}
public static void main(String[] args)
{
int N = 3 , A = 1 , B = 2 ;
System.out.println( "Vertex = " + vertices(N, A, B));
}
}
|
Python
def vertices(N, A, B):
position = 0
miniSum = 10 * * 9
Sum = 0
for i in range ( 1 , N + 1 ):
if (i = = A or i = = B):
continue
else :
x = abs (i - A)
y = abs (i - B)
Sum = x + y
if ( Sum < miniSum):
miniSum = Sum
position = i
return position
N = 3
A = 1
B = 2
print ( "Vertex = " ,vertices(N, A, B))
|
C#
using System;
using System.Collections.Generic;
class GFG
{
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++)
{
if (i == A || i == B)
continue ;
else
{
int x = Math.Abs(i - A);
int y = Math.Abs(i - B);
sum = x + y;
if (sum < minisum)
{
minisum = sum;
position = i;
}
}
}
return position;
}
public static void Main(String[] args)
{
int N = 3, A = 1, B = 2;
Console.WriteLine( "Vertex = " + vertices(N, A, B));
}
}
|
PHP
<?php
function vertices( $N , $A , $B )
{
$position = 0;
$minisum = PHP_INT_MAX;
$sum = 0;
for ( $i = 1; $i <= $N ; $i ++) {
if ( $i == $A || $i == $B )
continue ;
else {
$x = abs ( $i - $A );
$y = abs ( $i - $B );
$sum = $x + $y ;
if ( $sum < $minisum ) {
$minisum = $sum ;
$position = $i ;
}
}
}
return $position ;
}
$N = 3; $A = 1; $B = 2;
echo "Vertex = " ,vertices( $N , $A , $B );
?>
|
Javascript
<script>
function vertices(N, A, B)
{
var position = 0;
var minisum = Number.MAX_VALUE;
var sum = 0;
for ( var i = 1; i <= N; i++)
{
if (i == A || i == B)
continue ;
else
{
var x = Math.abs(i - A);
var y = Math.abs(i - B);
sum = x + y;
if (sum < minisum)
{
minisum = sum;
position = i;
}
}
}
return position;
}
var N = 3, A = 1, B = 2;
document.write( "Vertex = " + vertices(N, A, B));
</script>
|
Time Complexity: O(N)
Auxiliary Space: O(1)
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...