文科生的悲哀-斐波拉契数列

文科生的悲哀

时间限制: 1Sec 内存限制: 128MB 提交: 668 解决: 233
题目描述

化学不及格的Matrix67无奈选择了文科。他必须硬着头皮准备一次又一次的文科考试。
在这一学期一共有n次文科考试,考试科目有4种,分别为政治、历史、地理和综合。每次考哪一科是不定的,因此在考试前Matrix67不知道应该 去复习哪一科的功课。他希望能预测出下一次可能考的科目。于是,他收集到了以往的文科考试的资料。从以往的考试中,他发现了这样几个规律:
1.如果这次考的是政治,那么下一次一定会考历史;
2.如果这次考的是综合,那么下一次一定会考地理;
3.如果这次考的是历史,那么下一次要么考政治,要么考地理;
4.如果这次考的是地理,那么下一次要么考历史,要么考综合。
Matrix67已经知道,本学期的第一次考试科目为政治。他打算拟定一个可以应对所有可能情况的应考复习计划。因此,他想知道,整个学期有多少种可能的考试科目安排满足以上规律。你能帮他算出来吗?

输入

一个正整数n,代表本学期总的考试次数。(输入数据保证n<=10000)

输出

一个正整数,表示符合规律的科目安排方案的总数。
考虑到这个结果可能会很大,因此你只需要输出它mod 7654321的值即可。

题目思路,对于这个题目,我们可以发现

第一次考试:方案为1;第二次考试:方案为1;第三次考试:方案为2;第四次考试:方案为3;

第五次考试:方案为5;第六次考试:方案为8;第七次考试:方案为13;第八次考试:方案为21;

由此我们可以大胆推测出这是一个斐波拉契数列;

但是在这里,我们要注意一点,题目有说该数据可能会非常大,因此我们在循环中直接对该数据进行求模

#include
int main(){
	int N;
	scanf("%d",&N);
	
	long long int F[10010];
	F[1]=1;
	F[2]=1;
	int i;
	
		for(i=3;i<=N;i++)
		{
				F[i]=F[i-1]+F[i-2];
				F[i]=F[i]%7654321;}
		
	printf("%d\n",F[N]%7654321);
}

你可能感兴趣的:(c语言)