0
已解决
赵泰来
高级光能
高级光能
题目描述 Description
输入一个数n,请你计算在所有的n位数中,有多少数中含有k个数字3。由于数字可能很大,请你输出答案模上10007后的结果。
输入描述 Input Description
两个整数n、k
输出描述 Output Description
一个整数,如题所述
样例输入 Sample Input
3 2
样例输出 Sample Output
26
数据范围及提示 Data Size & Hint
0<k<n<=1000
样例说明:在所有的3位数中,出现两次3的数字有133、233、433、533、633、733、833、933、303、330、331、332、334、335、336、337、338、339、313、323、343、353、363、373、383、393
求思路,救救孩子吧
0
0
0
汪宇航
新手启示者
新手启示者
for,学过了吗?
for外圈:
for(int i=pow(10,n)i<=pow(10,n+1)-1;i++){
...
...
...
}
cout<<cnt%10007;
0
汪恺恒
中级启示者
中级启示者
递推啊
还有,这不是考试题吗(结果我爆20,因为0打成了1,样例竟没调出来)
状态:
f[i][j]表示i位数中有j个3的方案数
递推式
f[i][j]=(f[i-1][j]*9+f[i-1][j-1])%10007;
边界
f[1][0]=8,f[1][1]=1;
核心
for(int i=2;i<=n;i++){
for(int j=0;j<=min(k,i);j++){//j一定是从0开始!
f[i][j]=(f[i-1][j]*9+f[i-1][j-1])%10007;
}
}
0
汪宇航
新手启示者
新手启示者
@李显晨,内圈可以变成函数:
int f(...){
if(f%...==0||...||f%...==0) return 1;
return 0;
}
for里面:
if(f(i)) cnt++;
0
汪宇航
新手启示者
新手启示者
0