62,614
社区成员
发帖
与我相关
我的任务
分享
import java.util.Set;
import java.util.HashSet;
public class Pick {
private Set<Long> B=new HashSet<Long>();//保存已转变过的形式
private long shortest=10000;//次数
public void trans(long b,long k,long times){
if(b%k==0&&shortest>times+1) {
shortest=times+1;
return;
}
B.add(b);//将此次转变之前的形式保存起来
for(long i=0;i<=b;i++){
long t=times;
b+=k-i-i;
if(B.contains(b)||b/k>2) continue;//转变后的形式如果已经出现过或是b的长度大于k的2倍则进行下一次循环
t++;
trans(b,k,t);
}
}
public long pick(long B,long K){
long b=B%K;
long m=B/K;
if(b==0) return m;//刚好整除
trans(b,K,0);
return this.shortest+m;
}
public static void main(String[] args){
Pick p=new Pick();
long result=p.pick(1, 3);
System.out.println(result<10000?result:"没有结果!");
}
}
public long pick(long A,long B,long K){
if((A+B)<=K || ( K==0 && B != 0 )|| (A+B%K)<K) return -1;
else return B/K+2;
}
public long pick(long A,long B,long K){
if((A+B)<=K || K==0 || (A+B%K)<K) return -1; //如果K的大于A+B 那么无解 如果K=0 也是无解!
else return B/K+2;
}