星际密码
题目描述:将一个1110的矩阵,求出这个矩阵的n次方,然后取得到的矩阵的左上角的数字,如果小于4位的话,就前面补0,补到4位,超过四位的话就输出最后的四位
解题方法:本题如果去分析这个矩阵的规律的话,就会发现这个数是斐波那契数列的变形,我们平常的斐波那契数列都是用递归的方法写的,但是由于本题的用例的数字过大,产生的数据冗余比较大,因此这里要使用的是数组的方法,将每个斐波那契数列放到数组中,由于只要四位,所以直接给每个数%10000,就会得到四位,或者四位一下的数字,然后使用printf的%04d的方式打印,就可以了
#include<cstdio>
int main1()
{
int n, fib[10001], i, x; fib[0] = 1; fib[1] = 1;
for (i = 2; i < 10001; i++)
{
fib[i] = (fib[i - 1] % 10000 + fib[i - 2] % 10000) % 10000;
}
while (~scanf("%d", &n))
{
while (n--)
{
scanf("%d", &x); printf("%04d", fib[x]);
}
printf("\n");
}
return 0;
}