Program to find smallest difference of angles of two parts of a given circle

Given a division of circle into n pieces as an array of size n. The i-th element of the array denotes the angle of one piece. Our task is to make two continuous parts from these pieces so that the difference between angles of these two parts is minimum.

Examples:

Input : arr[] = {90, 90, 90, 90}
Output : 0
In this example, we can take 1 and 2 
pieces and 3 and 4 pieces. Then the 
answer is |(90 + 90) - (90 + 90)| = 0.

Input : arr[] = {170, 30, 150, 10}
Output : 0
In this example, we can take 1 and 4, 
and 2 and 3 pieces. So the answer is 
|(170 + 10) - (30 + 150)| = 0.

Input : arr[] = {100, 100, 160}
Ouput : 40

We can notice that if one of the part is continuous then all the remaining pieces also form a continuous part. If angle of the first part is equal to x then difference between angles of first and second parts is |x – (360 – x)| = |2 * x – 360| = 2 * |x – 180|. So for each possible continuous part we can count it’s angle and update answer.

C++

// CPP program to find minimum difference
// of angles of two parts of given circle.
#include <bits/stdc++.h>
using namespace std;

// Returns the minimum difference
// of angles.
int findMinimumAngle(int arr[], int n)
{
    int l = 0, sum = 0, ans = 360;
    for (int i = 0; i < n; i++) {
        // sum of array
        sum += arr[i];

        while (sum >= 180) {

            // calculating the difference of 
            // angles and take minimum of 
            // previous and newly calculated
            ans = min(ans, 2 * abs(180 - sum));
            sum -= arr[l];
            l++;
        }

        ans = min(ans, 2 * abs(180 - sum));
    }
    return ans;
}

// driver code
int main()
{
    int arr[] = { 100, 100, 160 };
    int n = sizeof(arr) / sizeof(arr[0]);
    cout << findMinimumAngle(arr, n) << endl;
    return 0;
}
// This code is contributed by "Abhishek Sharma 44"

Python3

# Python3 code to find minimum difference 
# of angles of two parts of given circle.
import math

# function returns the minimum 
# difference of angles.
def findMinimumAngle (arr, n):
    l = 0
    _sum = 0
    ans = 360
    for i in range(n):
        
        #sum of array
        _sum += arr[i]
        
        while _sum >= 180:
        
            # calculating the difference of
            # angles and take minimum of 
            # previous and newly calculated
            ans = min(ans, 2 * abs(180 - _sum))
            _sum -= arr[l]
            l+=1
        ans = min(ans, 2 * abs(180 - _sum))
    return ans
    
# driver code
arr = [100, 100, 160]
n = len(arr)
print(findMinimumAngle (arr, n))

# This code is contributed by "Abhishek Sharma 44"


Output:

40

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.

GATE CS Corner    Company Wise Coding Practice

Recommended Posts:



0 Average Difficulty : 0/5.0
No votes yet.










Writing code in comment? Please use ide.geeksforgeeks.org, generate link and share the link here.