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

นับจำนวน n หลักที่ผลรวมของหลักเท่ากับผลรวมที่กำหนดใน C++


กำหนดจำนวนบวกเป็นจำนวนหลักและผลรวม เป้าหมายคือการหาตัวเลข d ทั้งหมดที่มีผลรวมของตัวเลขเท่ากับผลรวมที่ป้อน ตัวเลขที่มีศูนย์นำหน้าจะไม่ถือเป็นตัวเลข d หลัก

ช่วงเป็นตัวเลขระหว่าง 1 ถึง 100 และผลรวมระหว่าง 1 ถึง 500

ให้เราเข้าใจด้วยตัวอย่าง

ตัวอย่าง

ป้อนข้อมูล - หลัก =3, Digi_sum =3

ผลลัพธ์ - การนับจำนวน n หลักที่ผลรวมของหลักเท่ากับผลรวมที่กำหนดคือ:6

คำอธิบาย - ตัวเลขสามหลักที่มีผลรวมของหลักเป็น 3 ได้แก่:

102, 111, 120, 201, 210 และ 300

ป้อนข้อมูล - หลัก =4 Digi_sum =2

ผลลัพธ์ - การนับจำนวน n หลักที่ผลรวมของหลักเท่ากับผลรวมที่กำหนดคือ 4

คำอธิบาย - ตัวเลขสี่หลักที่มีผลรวมของหลักเป็น 2 ได้แก่ :

1001, 1010, 1100 และ 2000

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

ในแนวทางนี้ เราจะสำรวจจากตัวเลข d หลักแรก และค้นหาหมายเลขแรกที่มีผลรวมของหลักเท่ากับผลรวมที่กำหนด จากนั้นเพิ่มจำนวนขึ้น 9 จนกว่าเราจะพบผลรวมของหลักที่มากกว่าผลรวมที่กำหนด เมื่อพบตัวเลขที่มีผลรวมหลักมากกว่าผลรวมอินพุตแล้วให้เพิ่มตัวเลข 1 แล้วหาตัวเลขถัดไปโดยมีผลรวมเป็นผลรวมอินพุต ทำขั้นตอนนี้ซ้ำจนถึงตัวเลข d หลักสุดท้าย

  • นำจำนวนหลักและผลรวมของหลักมาป้อนข้อมูล
  • Function digits_sum(int digits, int digi_sum) รับทั้งค่าอินพุตและคืนค่าการนับจำนวน n หลักซึ่งผลรวมของหลักเท่ากับผลรวมที่กำหนด
  • นับเริ่มต้นเป็น 0
  • ใช้ตัวเลขแรกเป็น Left =pow(10, digits - 1). และจำนวนสุดท้ายของช่วงเป็น right =pow(10, digits) - 1 ( i.e 10 and 99 for digits=2 )
  • ใช้ a while loop เคลื่อนที่จากซ้ายไปขวา
  • รับก่อน=0และสุดท้าย=ฉัน
  • สำหรับแต่ละ i ( last ) ให้ใช้หลักขวาสุด ( สุดท้าย % 10 ) และเพิ่มเข้าไปก่อน ลดครั้งสุดท้าย 10 สำหรับการทำซ้ำครั้งต่อไป
  • หากเท่ากับ digi_sum ในครั้งแรก ให้นับจำนวนและอัปเดต i 9 สำหรับการทำซ้ำครั้งต่อไป
  • มิฉะนั้น ให้เพิ่ม i ขึ้น 1
  • เมื่อสิ้นสุดการวนซ้ำทั้งหมด เราจะนับเป็นตัวเลขที่มีผลรวมหลักเท่ากับ digi_sum
  • ผลตอบแทนนับเป็นผลลัพธ์

ตัวอย่าง

#include <bits/stdc++.h>
using namespace std;

int digits_sum(int digits, int digi_sum) {
   int count = 0;
   int Left = pow(10, digits - 1);
   int right = pow(10, digits) - 1;
   int i = Left;
   while (i <= right) {
      int first = 0;
      int last = i;
      while (last != 0) {
         first = first + last % 10;
         last = last / 10;
      }
      if (first == digi_sum) {
         count++;
         i = i + 9;
      } else {
         i++;
      }
   }
   return count;
}
int main() {
   int digits = 5;
   int digi_sum = 7;
   cout << "Count of n digit numbers whose sum of digits equals to given sum are: " << digits_sum(digits, digi_sum);
   return 0;
}

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

ผลลัพธ์

Count of n digit numbers whose sum of digits equals to given sum are: 5