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

นับจำนวนวิธีในการหารตัวเลขเป็นส่วนๆ ใน C++


เราได้รับจำนวนบวก N เป้าหมายคือการนับจำนวนวิธีที่ตัวเลข N สามารถแบ่งออกเป็น 3 ส่วน ชิ้นส่วนอาจจะเท่ากันหรือไม่เท่ากันก็ได้ N อยู่ในช่วง [1,5000].

เราจะทำสิ่งนี้โดยใช้สามสำหรับลูปสำหรับ 3 ส่วนของตัวเลข ตรวจสอบวงในสุดว่าผลรวมของทั้งสามมีค่าเท่ากับ N หากเป็นจริง ให้เพิ่มจำนวนวิธี

มาทำความเข้าใจกับตัวอย่างกัน

ป้อนข้อมูล − N=5

ผลผลิต − จำนวนวิธีในการหาร N ออกเป็น 3 ส่วน:2

คำอธิบาย − 5 สามารถแสดงเป็นผลรวมของ (1,1,3) และ (1,2,2)

ป้อนข้อมูล − N=9

ผลผลิต − จำนวนวิธีในการหาร N ออกเป็น 3 ส่วน:7

คำอธิบาย − 9 สามารถแสดงเป็นผลรวมของ :(1, 1, 7), (1, 2, 6), (1, 3, 5), (1, 4, 4), (2, 2, 5), ( 2, 3,4) และ (3, 3, 3).

แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้

  • เราใช้จำนวนเต็ม N ที่เริ่มต้นด้วยค่าระหว่าง 1 ถึง 5000

  • ฟังก์ชัน divideN(int n) รับ n และส่งกลับจำนวนวิธีที่ n สามารถแบ่งออกเป็น 3 ส่วนได้

  • นับตัวแปรเริ่มต้นเป็น 0 สำหรับจำนวนวิธี

  • ข้ามโดยใช้สามลูปสำหรับแต่ละส่วนของตัวเลข

  • วงนอกสุดจาก 1<=i

  • ตรวจสอบว่าผลรวมของ i, j และ k เท่ากับ n หรือไม่ ถ้าเป็นจริงจะนับการเพิ่มขึ้น

  • เมื่อสิ้นสุดลูปทั้งหมด การนับจะมีจำนวนวิธีในการหาร n ออกเป็น 3 ส่วน

  • คืนค่าการนับเป็นผลลัพธ์

ตัวอย่าง

#include <bits/stdc++.h>
using namespace std;
int divideN(int n){
   int count = 0;
   for (int i = 1; i < n; i++){
      for (int j = i ; j < n; j++){
         for (int k = j; k < n; k++){
            int sum=i+j+k;
            if(sum==n)
               { count++; }
         }
      }
   }
   return count;
}
int main(){
   int N=500;
   cout <<endl<< "Number of ways to divide N in 3 parts : "<<divideN(N);
   return 0;
}

ผลลัพธ์

หากเราเรียกใช้โค้ดข้างต้น มันจะสร้างผลลัพธ์ต่อไปนี้ -

Number of ways to divide N in 3 parts: 20833