第十届蓝桥杯大赛软件类省赛 Java 大学 B试题 C: 数列求和解答

解题思路

此题类似于求菲波那契数列,但是无法直接求出求第20190324项的具体数值,long类型甚至BigInteger都存不了这么大的数,题目只要求求后4项,就是暗示我们求解结果只与每项数的后4位有关,故在过程中我们只保留后4位即可

说明:方法1和方法2的区别仅在于数据的存储方式不同,方法1是定义3个整型数来存后三项,方法2是用一个长度为3的整型数组来存储后三项

代码如下:
1)方法1

//方法1:(推荐此方法,容易理解)常规解法
public class C_SeriesSummation {

	public static void main(String[] args) {
		int a =  1, b = 1, c = 1;
		//要是求第四项,则i < 4, 同理可推出求第20190324项,则i < 20190324
		for (int i = 3; i < 20190324; i++) {
			int temp = (a + b + c) % 10000;
			a = b;
			b = c;
			c = temp;
		}
		System.out.println(c);
	}
}

2)方法2

//方法2:把数存到数组里,可能可以借鉴一下数据循环存储的思想
public class C_SeriesSummation {

public static void main(String[] args) {
	int[] arr = {1, 1, 1};	//我们只需要创建长度为3的数组,可以将计算出来的数依次循环存在数组里,最后求出结果,
							//例如第4项为前三项结果的和,应该被存在arr[0]里,第5项为数组里三个元素的和,应该被存在arr[1]里...后续的数均按0,1,2,0,1,2...存储
	int k= 0, m = 0, n = 0, sum = 0;
	for(int i = 4; i < 20190325; i++) { //i代表第i项数,前三项数为1,1,1被存储在数组arr里面,我们就从第4个数开始求,求到第20190324项
		k = i % 3;	//例如当i=4时,可是数组arr的长度只有3,arr的下标只能是0,1,2,要把计算出来数存储在下标为k=0的位置,即k=i%3
		m = (i + 1) % 3;	
		n = (i + 2) % 3;
		sum = (arr[k] + arr[m] + arr[n]) % 10000;
		arr[k] = sum;
	}
	System.out.println(sum); //第i项数就是arr[k],就是sum
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值