数列求值

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);
    }
}

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值