【发布时间】:2015-09-30 16:06:22
【问题描述】:
我们得到三个整数 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);
}
}
但我得到的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
【问题讨论】:
-
@你能解释一下你在代码中使用的逻辑吗?
-
我对此有不同的解决方案,它在 JAVA 中使用字符串。
-
@Dante 我使用了链接中描述的概念,使用排列
-
奇怪的是,目前的答案都没有解决 OP 的问题,“请帮我找出我的错误。”
-
这与stackoverflow.com/q/31285547/2336725 相关,虽然它有
x=y=z=+Infinity。