给定一个整数范围,一个变量m用作除数,一个变量d用来检查数字“ d”是否在偶数位置,任务是计算a中这些数字的计数。变量m可除的范围,偶数位置为d。
输入-int开始= 20,结束= 50,d = 8且m = 4
输出-被m整除并且在偶数位置具有d的范围内的数字计数是:2
说明-范围是从20到50。因此,数字d即8的可能数字是28、38和48,偶数位置即8,即8,数字24和48可被m除以即4,因此计数为2 。
输入-int开始= 10,结束= 100,d = 6且m = 2
输出-被m整除并且在偶数位置具有d的范围内的数字计数是:8
说明-范围从10到100。所以数字d的可能数字即6、16、26、36、46、56、66、76、86和96在偶数位置具有6,而数字6和66除外。处于奇数位置,因此我们将不包括此位置,现在我们将检查列表中可被2整除的数字,以便所有数字(即16,26、36、46、56、76、86和96可被2整除)计数是8。
创建一个从变量start到变量end的整数范围,并声明变量d和m并输入值。将数据传递给函数以进行进一步处理。
创建一个类型为vector的变量,比如说vec。
启动循环,直到变量内部的值开始。现在,在while内将值val%10推入向量并将val设置为val / 10。
通过将和作为参数传递给STL,以调用STL的反向函数。vec.begin()vec.end()
使用memset将数组中的值设置为-1。
返回set_total(0,0,0,vec),此函数将检查位置d为偶数且可以被m整除的数字
在set_totalfunction-内部:
检查IF位置是否等于向量的大小,然后检查IF temp = 0然后返回1或返回0。
检查如果arr [place] [temp] [val]不等于-1,然后返回arr [place] [temp] [val]的值。
检查IF place%2 = 1,然后检查IF val = 0,然后检查IF d是否大于vec [place],然后返回0
声明变量temp_2并将其设置为0。
检查IF d小于vec [place],然后将temp_2设置为1。
声明变量temp_3并对该进行递归调用,set_total()并返回arr [place] [temp] [val] = temp_3
声明一个变量计数以存储结果。
声明变量set_limit并将其设置为9,如果val等于1 ELSE,则使用vec [place]对其进行设置。
从i到0开始执行FOR循环,直到set_limit并检查i是否等于d,然后继续
将变量声明为temp_2并将其设置为val
检查i是否小于vec [place],然后将temp_2设置为1
通过对函数set_total的递归调用来设置计数
返回arr [place] [temp] [val] = count。
#include <bits/stdc++.h>
using namespace std;
int arr[20][20][2];
int d, m;
int set_total(int place, int temp, int val, vector < int > vec) {
if (place == vec.size()) {
if (temp == 0) {
return 1;
}
return 0;
}
if (arr[place][temp][val] != -1) {
return arr[place][temp][val];
}
if (place % 2) {
if (val == 0) {
if (d > vec[place]) {
return 0;
}
}
int temp_2 = val;
if (d < vec[place]) {
temp_2 = 1;
}
int temp_3 = set_total(place + 1, (10 * temp + d) % m, temp_2, vec);
return arr[place][temp][val] = temp_3;
}
int count = 0;
int set_limit = (val ? 9 : vec[place]);
for (int i = 0; i <= set_limit; i++) {
if (i == d) {
continue;
}
int temp_2 = val;
if (i < vec[place]) {
temp_2 = 1;
}
count += set_total(place + 1, (10 * temp + i) % m, temp_2, vec);
}
return arr[place][temp][val] = count;
}
int divisible(int val) {
vector < int > vec;
while (val) {
vec.push_back(val % 10);
val = val / 10;
}
reverse(vec.begin(), vec.end());
memset(arr, -1, sizeof(arr));
return set_total(0, 0, 0, vec);
}
int main() {
int start = 20, end = 50;
d = 8, m = 4;
int count = divisible(end) - divisible(start);
cout << "被m整除并且在偶数位置具有d的范围内的数字计数为: " << count;
return 0;
}如果我们运行上面的代码,它将生成以下输出-
输出结果
被m整除并且在偶数位置具有d的范围内的数字计数为: 2