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位数字。

  • 以数字位数和数字总和作为输入。

  • 函数同时digits_sum(int digits, int digi_sum)接受两个输入值,并返回n位数字的计数,其位数之和等于给定的总和。

  • 将初始计数设为0。

  • 将第一个数字设为Left = pow(10,digits-1)。范围的最后一个数字为right = pow(10,digits)-1(i.e digits = 2时为10和99)。

  • 使用while循环从左到右遍历。

  • 取first = 0和last = i。

  • 对于每个i(last),取最右边的数字(last%10)并加到第一个。在下一次迭代中将最后一次减少10。

  • 如果first等于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 << "n个位数之和等于给定总和的n位数字的计数是: " << digits_sum(digits, digi_sum);
   return 0;
}

如果我们运行上面的代码,它将生成以下输出-

输出结果

n个位数之和等于给定总和的n位数字的计数是: 5

猜你喜欢