C++中計算數字之和等於給定和的n位數的個數


給定一個正數作為位數和一個和。目標是找到所有位數為d且數字之和等於輸入和的數字。不考慮前導零的數字。

範圍是1到100之間的數字,和是1到500之間。

讓我們透過例子來理解。

例如

輸入 - 位數 = 3,數字和 = 3

輸出 - 數字之和等於給定和的n位數的個數為:6

解釋 - 三位數且數字之和為3的數字是

102, 111, 120, 201, 210, 和 300。

輸入 - 位數 = 4,數字和 = 2

輸出 - 數字之和等於給定和的n位數的個數為:4

解釋 - 四位數且數字之和為2的數字是

1001, 1010, 1100, 和 2000。

下面程式中使用的方法如下

在這種方法中,我們將從第一個d位數開始遍歷,並找到數字之和等於給定和的第一個數字。然後將數字遞增9,直到找到數字之和大於給定和的數字。一旦找到一個數字之和大於輸入和的數字,則將數字遞增1,並找到下一個數字之和等於輸入和的數字。重複此過程,直到最後一個d位數。

  • 將位數和數字和作為輸入。
  • 函式`digits_sum(int digits, int digi_sum)`接收兩個輸入值,並返回數字之和等於給定和的n位數的個數。
  • 將初始計數設為0。
  • 將第一個數字設為`Left = pow(10, digits - 1)`。並將範圍的最後一個數字設為`right = pow(10, digits) - 1`(例如,對於digits=2,為10和99)。
  • 使用while迴圈從左到右遍歷。
  • 將`first=0`和`last=i`。
  • 對於每個i(last),取最右邊的數字(last % 10)並新增到first。對於下一次迭代,將last減少10。
  • 如果first等於digi_sum,則遞增計數,並將i更新為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

更新於:2021年1月29日

326 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.