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

นับวิธีแสดงตัวเลขเป็นผลรวมของยกกำลังใน C++


ให้ตัวเลขสองตัวและกำลังเป็นอินพุต เป้าหมายคือการหาวิธีที่ 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