Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

โปรแกรมค้นหาความแตกต่างที่เล็กที่สุดของมุมสองส่วนของวงกลมที่กำหนดใน C++


ในปัญหานี้ เราได้รับอาร์เรย์ที่แสดงถึงชิ้นส่วนของวงกลมตามมุมของวงกลม งานของเราคือสร้าง โปรแกรมเพื่อค้นหาความแตกต่างที่เล็กที่สุดของมุมสองส่วนของวงกลมที่กำหนดใน C++ .

คำอธิบายปัญหา − เราได้รับมุมของทุกส่วนของวงกลมในอาร์เรย์ เราจำเป็นต้องเชื่อมชิ้นงานในลักษณะที่ทั้งสองชิ้นที่ทำขึ้นมีมุมต่างกันน้อยที่สุด

มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากัน

อินพุต

ang[] = {90, 45, 90, 135}

โปรแกรมค้นหาความแตกต่างที่เล็กที่สุดของมุมสองส่วนของวงกลมที่กำหนดใน C++

ผลลัพธ์

90

คำอธิบาย

นำที่ 1 และ 2 มารวมกัน เช่น 90 + 45 =135

นำที่ 3 และ 4 มารวมกัน เช่น 90 + 135 =225

ส่วนต่าง =225 - 135 =90

แนวทางการแก้ปัญหา

ที่นี่เราต้องรวมส่วนทั้งหมดให้เป็นสองส่วน ในการนั้น เราจำเป็นต้องแยกส่วนที่ต่อเนื่องกัน (ในตัวอย่าง เรานำ ang1 กับ ang3 มารวมกันไม่ได้)

ลองหามุมของตอนที่ 1 เป็น A กัน

แล้วมุมของ part2 จะเป็น 360 - A.

ความแตกต่างจะเป็น |A - (360 - A)| เราใช้ค่าสัมบูรณ์เนื่องจากมีเพียงมุมบวกเท่านั้น

การแก้สมการผลต่าง

2 * |A - 180| ค่านี้ต้องเป็นค่าต่ำสุด และสำหรับสิ่งนั้น เราจะพยายามรวมทุกส่วนของวงกลมที่เป็นไปได้และหาค่าต่ำสุดสำหรับ (2*|A - 180|)

โปรแกรมเพื่อแสดงการทำงานของโซลูชันของเรา

ตัวอย่าง

#include <iostream>
#include <math.h>
using namespace std;
int CalcSmallDiffAng(int ang[], int n) {
   int Left = 0, A = 0, minDiff = 360;
   for (int i = 0; i < n; i++) {
      A += ang[i];
      while (A >= 180) {
         minDiff = min(minDiff, 2 * abs(180 - A));
         A -= ang[Left];
         Left++;
      }
      minDiff = min(minDiff, 2 * abs(180 - A));
   }
   return minDiff;
}
int main() {
   int ang[] = { 90, 45, 90, 135 };
   int n = sizeof(ang) / sizeof(ang[0]);
   cout<<"The smallest difference of angles of two parts of a given
   circle is "<<CalcSmallDiffAng(ang, n);
   return 0;
}

ผลลัพธ์

The smallest difference of angles of two parts of a given circle is 90