P8825 [传智杯 #3 初赛] 运气 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

题解:这里面就通过DFS来扩充数位。将上一个数*10+i然后递交给下一层DFS,以达到扩充数位,待数位到达指定长度后对其进行处理。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#define ll long long 
using namespace std;
ll n, k, cnt;
void dfs(int x, ll sum) {//当前位数,当前搜索的数
if (x == n) {//位数到了
if (sum % k == 0) cnt++;//如果满足条件就计数器加一
return;
}
for (int i = 1; i <= 6; i++) dfs(x + 1, sum * 10 + i); //位数加一,在后面补数
}
int main() {
cin >> n >> k;
dfs(0, 0);//从0位数,当前数为0开始搜索
cout << cnt % 1000000007;//记得取模
}