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
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP