我们给出三个整数x,y和z.你必须找到所有数字的总和,其数字仅由4,5和6组成,十进制表示最多为x四,十进制表示最多为y五,十进制表示最多为z六
我正在使用Describe Here这个概念
我的代码:
// fact[i] is i!
for(int i=0;i<=x;i++)
for(int j=0;j<=y;j++)
for(int k=0;k<=z;k++){
int t = i+j+k;
if(t==0) continue;
long ways = fact[t-1];
long pow = (long) Math.pow(10,t-1);
long rep=0;
if(i!=0){
rep = fact[j]*fact[k];
if(i>0) rep*=fact[i-1];
o+= 4*pow*(ways/rep);
}
if(j!=0){
rep = fact[i]*fact[k];
if(j>0) rep*=fact[j-1];
o+= 5*pow*(ways/rep);
}
if(k!=0){
rep = fact[i]*fact[j];
if(k>0) rep*=fact[k-1];
o+= 6*pow*(ways/rep);
}
}
Run Code Online (Sandbox Code Playgroud)
但我得到了错误的答案x=1 , y=1 and z=1我得到3315,而正确答案是3675.
请帮我找出错误.
4+5+6+45+54+56+65+46+64+456+465+546+564+645+654=3675
Run Code Online (Sandbox Code Playgroud)