ในปัญหานี้ เราได้รับตัวเลข N หน้าที่ของเราคือค้นหาค่าพื้นของรากที่ห้าของตัวเลข
รากที่ห้า ของตัวเลขคือจำนวนที่เมื่อคูณตัวเอง 5 ครั้งจะคืนค่าตัวเลข
ถ้า N 1/5 =แล้ว a*a*a*a*a =N .
มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากัน
ป้อนข้อมูล: ไม่มี =325
ผลลัพธ์: 3
คำอธิบาย:
รากที่ห้าของ 325 คือ 3.179 ซึ่งมีมูลค่าพื้นเท่ากับ 3
แนวทางแก้ไข:
วิธีแก้ปัญหาง่ายๆ คือข้ามจาก 1 ถึง n และการหาจำนวนที่เมื่อคูณตัวเองห้าครั้งจะได้จำนวน
ในที่นี้ หาค่าที่แน่นอนไม่ได้เพราะตัวเลขไม่ใช่ยกกำลังห้าที่สมบูรณ์แบบเสมอไป ดังนั้น เราจะหาค่าแรกที่ทำให้ยกกำลังที่ 5 มากกว่า n แล้วคืนค่า -1 เพื่อให้ได้ค่ารากที่ 5
โปรแกรมเพื่อแสดงการทำงานของโซลูชันของเรา
ตัวอย่าง
#include<iostream> using namespace std; int calcFifthRoot(int n) { if (n == 0 || n == 1) return n; int a = 0; for(a = 1; a*a*a*a*a < n ; a++){ } return (a - 1); } int main() { int n = 325; cout<<"The Floor of fifth root of "<<n<<" is "<<calcFifthRoot(n); return 0; }
ผลลัพธ์ -
The Floor of fifth root of 325 is 3
อัลกอริธึมนี้ดี แต่อาจมีวิธีแก้ปัญหาที่มีแนวโน้มดีกว่า ซึ่งสามารถทำได้โดยอัปเดตอัลกอริธึมการค้นหาและใช้ การค้นหาไบนารี อัลกอริธึม เพื่อค้นหารากที่ห้าของตัวเลข
โปรแกรมเพื่อแสดงการทำงานของโซลูชันของเรา
ตัวอย่าง
#include<iostream> using namespace std; int calcFifthRoot(int n) { if (n == 0 || n == 1) return n; int start = 1, end = n, root = 0; while (start <= end) { int a = (start + end) / 2; long int apowfive = a*a*a*a*a; if (apowfive == n) return a; if (apowfive < n) { start = a + 1; root = a; } else end = a - 1; } return root; } int main() { int n = 250; cout<<"The floor of fifth root of "<<n<<" is "<<calcFifthRoot(n); return 0; }
ผลลัพธ์ -
The floor of fifth root of 250 is 3