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

更新於: 2021年1月29日

146 次檢視

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.