考察点是对数据进行截取和比值四舍五入达到与0.618034一致的精度(这里是重点,我做的时候没有考虑这个四舍五入,得到的是答案的后一项,为2204/3571,这个比值是0.6180342,但是前一项1364/2204的比值是0.6180335,经过四舍五入算是0.618034了)。
需要对求出来的比值进行转换成字符串处理,只保留8位数(包括0和.),这里使用String的format方法来进行字符串转换的处理。
String的format方法允许创建格式化字符串和连接多个字符串对象,我们只需要用到第一个功能,也就是他的其中一个构造方法。
如果对格式化字符串不了解的话,可以看一下C语言的printf,C语言的printf就是格式化输出
import java.util.*;
// 1:无需package
// 2: 类名必须Main, 不可修改
public class Main {
public static void main(String[] args) {
//题目要求是0.618034 一致,所以我们将队列中的数相除,然后转换成字符串,进行截取即可
List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(3);
for(int i = 2;i<100;i++){
//转换成字符串
String str = String.format("%.6f",(float)list.get(i-2)/(float)list.get(i-1));
//如果str长度大于8位,就需要进行截取
if(str.equals("0.618034")){
System.out.println(list.get(i-2)+"/"+list.get(i-1));
break;
}else{
//如果前面两个数并没有接近0.618034,那么就生成下一个 鲁卡斯队列数
list.add(list.get(i-2)+list.get(i-1));
}
}
}
}
答案是: