ในปัญหานี้ เราได้รับตัวเลข 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