1. 【题目描述】:
给定数列 1, 1, 1, 3, 5, 9, 17, …,从第 4 项开始,每项都是前 3 项的和。求第 20190324 项的最后 4 位数字
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个 4 位整数(提示:答案的千位不为 0),在提交答案时只填写这个整数,填写多余的内容将无法得分
2. 思路分析
① 这个是第十届蓝桥杯Java B组的题目,一开始的时候没有想到使用取余数的方法,实在是太笨了,假如需要某个数字的末尾几位那么只需要将这个数字取这相应位数大1的数字即可,比如这道题目是需要取出末尾四位数字那么只需要对10000取余数即可,因为任何大于10000的数字取余之后那么结果都会在0~9999之间所以自然就可以得到末尾的四位数字,不管怎么样取余数那么结果对于某位四位数字是没有任何影响的
② 因为要求解出第20190324项,所以其中的数字还是比较大的,可以使用四个变量来记录中间结果,在循环的时候对这四个数字进行动态改变,并且在计算之前需要对每个中间结果进行取余,确保当前记录的变量在10000以下
③ 从0开始计算那么只需要循环至20190321项即可
3. 下面是具体的代码
public class Main {
public static void main(String[] args) {
int one = 1, two = 1, three = 1;
int temp = 0;
for (int i = 0; i < 20190321; ++i){
one = one >= 10000 ? one % 10000 : one;
two = two >= 10000 ? two % 10000 : two;
three = three >= 10000 ? three % 10000 : three;
temp = one + two + three;
/*从前面往后面赋值*/
one = two;
two = three;
three = temp >= 10000 ? temp % 10000 : temp;
}
System.out.println(three);
}
}