案例是给了197 = {1,9,7,17,33,57,......197}
斐波那契数列变种
意思就是假如是三位数字就求三项之和 四位数就求四位之和,五位数就求五位之和
思路:
使用链表每次删除头部,和添加尾部,保证效率
将这个数字转为字符串
然后把把每一个字符转化为数字加入到链表中,然后把链表所有元素求和,把求和的加入链表中,把首项去掉,并且把求和置为0,循环往复,可以求出
import java.util.LinkedList;
public class Main {
public static void main(String[] args) {
int num = 500;
int maxVal = 0;
int sum = 0;
for (int i = 197; i < 10000000; i++) {
LinkedList<Integer> list = toLinked(i + "");
while(true)
{ sum=0;
for (Integer val : list) {
sum+=val;
}
list.add(sum);
list.removeFirst();
if(sum==i) {maxVal=sum;break;}
if(sum>i) break;
}
}
System.out.println(maxVal);
}
public static LinkedList<Integer> toLinked(String s)
{
LinkedList<Integer> list = new LinkedList<>();
char[] charArray = s.toCharArray();
for (char c : charArray) {
list.add(c-'0');
}
return list;
}
}
要求是求前一百万项 最大符合的值 可以随便改,思路应该是对的 链表太符合这个情况了
算出来是7913837