ให้ตัวเลขสองตัวและกำลังเป็นอินพุต เป้าหมายคือการหาวิธีที่ num สามารถแสดงเป็นผลรวมของจำนวนธรรมชาติที่ไม่ซ้ำกันซึ่งยกขึ้นเป็นยกกำลังที่กำหนด ถ้า num คือ 10 และกำลังเป็น 2 เราก็สามารถแทน 10 เป็น 12+32 รวมเป็น 1 วิธี
ตัวอย่าง
อินพุต
num=30
ผลลัพธ์
Count of ways to express a number as sum of powers are: 2
คำอธิบาย
The ways in which we can express 30 as sum of powers: 12 + 22 + 52 and 12 + 22 + 32 + 42
อินพุต
num=35
ผลลัพธ์
Count of ways to express a number as sum of powers are: 1
คำอธิบาย
The ways in which we can express ‘num’ as sum of powers: 22 + 32
แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้ −
ในวิธีนี้เราจะตรวจสอบก่อนว่าตัวเลขนั้นเป็นกำลังของ num power . ใดๆ หรือไม่ . ถ้าใช่ ให้คืนค่าเป็น 1 ถ้าไม่เช่นนั้น ให้ตรวจสอบผลรวมซ้ำ กำลัง + (num+1) กำลัง .
-
นำเลขจำนวนเต็มสองตัวและกำลังมาเป็นอินพุต
-
ฟังก์ชัน sum_of_powers(int num, int power, int val) รับค่า num และคืนค่าจำนวนวิธีที่จะแสดง 'num' เป็นผลรวมของจำนวนธรรมชาติที่ไม่ซ้ำกันที่ยกกำลังที่กำหนด
-
เช็ค=(num − pow(val, power)). หากเช็คเป็น 0 ให้คืนค่า 1 เนื่องจากตัวเลขคือ val power .
-
หากเช็คน้อยกว่า 0 ให้คืนค่า 0
-
มิฉะนั้น ใช้ temp=val+1.
-
ผลตอบแทนรวมของ ( sum_of_powers(check, power, temp) + sum_of_powers(num, power, temp) )
-
ในตอนท้ายเราจะได้วิธีการคืนค่า
ตัวอย่าง
#include <bits/stdc++.h> using namespace std; int sum_of_powers(int num, int power, int val){ int check = (num − pow(val, power)); if(check == 0){ return 1; } else if(check < 0){ return 0; } else { int temp = val + 1; return sum_of_powers(check, power, temp) + sum_of_powers(num, power, temp); } } int main(){ int num = 25, power = 2; cout<<"Count of ways to express a number as sum of powers are: "<<sum_of_powers(num, power, 1); return 0; }
ผลลัพธ์
หากเราเรียกใช้โค้ดข้างต้น มันจะสร้างผลลัพธ์ต่อไปนี้ -
Count of ways to express a number as sum of powers are: 2