C++ 中滿足 m + sum(m) + sum(sum(m)) = N 的數字計數
給定一個數字 N 作為輸入。目標是找到滿足以下條件的,不超過 N 的數字 m。這裡 N<=109
m + sum(m) + sum ( sum (m) ) = N。其中 sum(m) 是 m 的各位數字之和。
如果 m 是 137,則 sum(m)=1+3+7=11 且 sum(sum(m))= sum(11)= 1+1=2
讓我們透過示例來理解。
例如
輸入 - N=27
輸出 - 滿足 m + sum(m) + sum(sum(m)) = N 的數字數量為:3
解釋 - 這些數字是
9 ( 9 + 9 + 9 = 27 )
15 ( 15 + (1+5) + (6) = 27 )
21 ( 21 + (2+1) + (3) = 27 )
輸入 - N=81
輸出 - 滿足 m + sum(m) + sum(sum(m)) = N 的數字數量為:2
解釋 - 這些數字是
63 ( 63 + (6+3) + 9 = 81 )
66 ( 66 + (6+6) + (1+2) = 81 )
下面程式中使用的方案如下
在這種方案中,我們將計算數字的各位數字之和,並將相加的和與 N 進行比較。如果計算出的和等於 N,則遞增計數。最後返回計數作為結果。
由於最大數字可能是 109,則 m 的各位數字的最大和可以是 81(9*9),而 sum(sum(m)) 的下一個最大各位數字之和可以是 16(79 的 7+9)。因此,我們將檢查從 N-97 到 N 的數字,因為小於 N-97 和大於 N 的整數將不滿足給定條件。
- 以整數 N 作為輸入。
- 函式 total(int num) 獲取一個數字 total 並返回其各位數字之和。
- 將 res_total 作為各位數字之和,將 res 作為當前餘數。兩者都初始化為 0。
- 使用 while 迴圈遍歷每個個位數字。
- 將個位數字作為 res=num % 10 並新增到 res_total 中。
- 將 num 減少 10 以獲取下一個數字。
- 最後返回 res_total 作為 num 的各位數字之和。
- 函式 condition(int N) 獲取 N 並返回滿足 m + sum(m) + sum(sum(m)) 的數字計數。
- 將初始計數設定為 0。
- 使用 for 迴圈從 i=N-97 遍歷到 i<=N。
- 計算各位數字之和,即 temp_1=total(i)。
- 計算 total(i) 的各位數字之和,即 total(temp_1)。
- 設定 temp_3 = i + temp_1 + temp_2。如果它等於 N,則遞增計數。
- 在 for 迴圈結束時,返回計數作為結果。
示例
#include <bits/stdc++.h>
using namespace std;
int total(int num) {
int res_total = 0;
int res = 0;
while (num > 0) {
res = num % 10;
res_total = res_total + res;
num = num / 10;
}
return res_total;
}
int condition(int N) {
int count = 0;
for (int i = N - 97; i <= N; i++) {
int temp_1 = total(i);
int temp_2 = total(temp_1);
int temp_3 = i + temp_1 + temp_2;
if (temp_3 == N) {
count++;
}
}
return count;
}
int main() {
int N = 9999;
cout << "Count of numbers satisfying m + sum(m) + sum(sum(m)) = N are: " << condition(N);
return 0;
}如果我們執行以上程式碼,它將生成以下輸出:
輸出
Count of numbers satisfying m + sum(m) + sum(sum(m)) = N are: 2
廣告
資料結構
網路
關係資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP