ในรูปหลายเหลี่ยมด้าน N หากเด็กสองคนยืนอยู่บนจุดยอด A และ B เราจำเป็นต้องกำหนดจำนวนจุดยอดที่บุคคลอื่นควรยืน เพื่อให้บุคคลนั้นต้องกระโดดให้ถึง A และ B ทั้งสองจำนวนขั้นต่ำพี>
เงื่อนไขสองประการที่ควรทราบในที่นี้คือ จุดยอดของรูปหลายเหลี่ยมมีหมายเลขตามเข็มนาฬิกา และเราจะเลือกจุดยอดที่มีหมายเลขน้อยที่สุดเสมอในกรณีที่มีคำตอบหลายข้อ
vertexPosition(ด้าน int, vertexA, int vertexB) รับหมายเลข ของด้านต่างๆ ของรูปหลายเหลี่ยมและตำแหน่งของจุดยอด A และ B วง for เริ่มตั้งแต่ 1 และวนซ้ำจนถึง i น้อยกว่าหรือเท่ากับจำนวนด้าน หาก i ไม่เท่ากับ vertexA และ vertexB ความแตกต่างที่แน่นอนระหว่าง i และ vertex A และในทำนองเดียวกันระหว่าง i และ vertexB จะถูกคำนวณและบันทึกเป็น x และ y ตามลำดับ
int vertexPosition(int N, int vertexA, int vertexB){ int tempSum = INT_MAX; int sum = 0; int position = 0; for (int i = 1; i <= N; i++) { if (i != vertexA && i != vertexB){ int x = abs(i - vertexA); int y = abs(i - vertexB);
ต่อไปเราจะบันทึกผลรวมของ x และ y ลงในตัวแปร sum และตรวจสอบว่าผลรวมน้อยกว่า tempSum หรือไม่ หากน้อยกว่า tempSum ค่าผลรวมปัจจุบันจะถูกกำหนดให้กับ tempSum และค่าดัชนีปัจจุบันจะถูกกำหนดให้กับตัวแปรตำแหน่ง เราตรวจสอบว่าผลรวมใหม่ที่ได้รับนั้นน้อยกว่าผลรวมก่อนหน้าที่เก็บไว้ใน tempSum หรือไม่ในคำสั่ง if เพื่อให้เราส่งคืนตำแหน่งที่ใกล้เคียงที่สุด N อาจมาจาก A และ B หลังจากที่วนซ้ำเสร็จสิ้น การวนซ้ำตำแหน่งจะถูกส่งคืน
sum = x + y; if (sum < tempSum){ tempSum = sum; position = i; } } } return position; }
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อกำหนดตำแหน่งของบุคคลที่สามบนรูปหลายเหลี่ยมด้าน N ปกติ
#include <iostream> using namespace std; int vertexPosition(int N, int vertexA, int vertexB){ int tempSum = INT_MAX; int sum = 0; int position = 0; for (int i = 1; i <= N; i++) { if (i != vertexA && i != vertexB){ int x = abs(i - vertexA); int y = abs(i - vertexB); sum = x + y; if (sum < tempSum){ tempSum = sum; position = i; } } } return position; } int main(){ int N = 6, vertexA = 2, vertexB = 4; cout << "The vertex on which N should stand = " << vertexPosition(N, vertexA, vertexB); return 0; }
ผลลัพธ์
รหัสข้างต้นจะสร้างผลลัพธ์ต่อไปนี้ -
The vertex on which N should stand = 6