(a,b)=>(int)Math.Pow(a,b);f=n=>{var l=new List<int>(new int[21].SelectMany((_,x)=>new[]{x,x*2,x*3})){25,50};int a=l.Count,b,c,d,e=P(a,n),f;var r=new int[e];for(b=e;b>0;b--)for(c=0;c<n;c++){d=b;while(d>P(a,c+1))d-=P(a,c+1);f=(d/P(a,c))-1;r[b-1]+=l[f>0?f:0];}return Enumerable.Range(0,l.Max()*n).Except(r);}
好吧,似乎没有一种简单的方法来计算C#中所有可能的组合,所以我能想到的就是这种代码灾难。
另外,大约需要30秒钟才能完成...
希望看到更好的解决方案。
P=(a,b)=>(int)Math.Pow(a,b);
F=n=>
{
var l=new List<int>(new int[21].SelectMany((_,x)=>new[]{x,x*2,x*3})){25,50};
int a=l.Count,b,c,d,e=P(a,n),f;
var r=new int[e];
for(b=e;b>0;b--)
for(c=0;c<n;c++)
{
d=b;
while(d>P(a,c+1))
d-=P(a,c+1);
f=(d/P(a,c))-1;
r[b-1]+=l[f>0?f:0];
}
return Enumerable.Range(0,l.Max()*n).Except(r);
}
在线尝试!