给定一个整数范围,一个变量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