给定一个正数作为数字位数和一个和。目的是找到所有数字总和等于输入总和的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