基础编程题之牛客网星际密码
Posted 快乐江湖
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基础编程题之牛客网星际密码相关的知识,希望对你有一定的参考价值。
题目
解题思路
本题的基本意思就是给你给定一个矩阵:
(
1
1
1
0
)
\\begin{pmatrix} 1 & 1 \\\\ 1 & 0 \\end{pmatrix}
(1110),然后一个数n,n表示矩阵
(
1
1
1
0
)
\\begin{pmatrix} 1 & 1 \\\\ 1 & 0 \\end{pmatrix}
(1110)的n次方,这个n代表一个数也就是解密的结果,即为
(
1
1
1
0
)
\\begin{pmatrix} 1 & 1 \\\\ 1 & 0 \\end{pmatrix}
(1110)n的结果的(也是一个矩阵)的左上角数字。
如果该数字小于4就用0补充,如果大于4就只输出最后4位
同时矩阵的乘法公式如下:
所以先代入前几个数,可以发现如下规律
当n=1时,左上角值=1
( 1 1 1 0 ) \\begin{pmatrix} 1 & 1 \\\\ 1 & 0 \\end{pmatrix} (1110)
当n=2时,左上角值=2
( 1 1 1 0 ) \\begin{pmatrix} 1 & 1 \\\\ 1 & 0 \\end{pmatrix} (1110) * ( 1 1 1 0 ) \\begin{pmatrix} 1 & 1 \\\\ 1 & 0 \\end{pmatrix} (1110) = ( 1 1 1 0 ) \\begin{pmatrix} 1 & 1 \\\\ 1 & 0 \\end{pmatrix} (1110)
当n=3时,左上角值=3
( 2 1 1 1 ) \\begin{pmatrix} 2 & 1 \\\\ 1 & 1 \\end{pmatrix} (2111) * ( 1 1 1 0 ) \\begin{pmatrix} 1 & 1 \\\\ 1 & 0 \\end{pmatrix} (1110) = ( 3 2 2 1 ) \\begin{pmatrix} 3 & 2 \\\\ 2 & 1 \\end{pmatrix} (3221)
当n=4时,左上角值=4
( 3 2 2 1 ) \\begin{pmatrix} 3 & 2 \\\\ 2 & 1 \\end{pmatrix} (3221) * ( 1 1 1 0 ) \\begin{pmatrix} 1 & 1 \\\\ 1 & 0 \\end{pmatrix} (1110) = ( 5 3 3 2 ) \\begin{pmatrix} 5 & 3 \\\\ 3 & 2 \\end{pmatrix} (5332)
当n=5时,左上角的值=8
( 5 3 3 2 ) \\begin{pmatrix} 5 & 3 \\\\ 3 & 2 \\end{pmatrix} (5332) * ( 1 1 1 0 ) \\begin{pmatrix} 1 & 1 \\\\ 1 & 0 \\end{pmatrix} (1110) = ( 8 5 5 3 ) \\begin{pmatrix} 8 & 5 \\\\ 5 & 3 \\end{pmatrix} (8553)
当n=6时,左上角的值=?
····
····
····
可以发现是很明显的斐波那契数列
代码
// write your code here cpp
#include <iostream>
#include <vector>
#include <cstdio>
using namespace std;
void Fib(vector<int>& fib)
{
for(int i=2 ;i < 10001;i++)
{
fib.push_back((fib[i-1]+fib[i-2])%10000);
}
}
int main()
{
int number=0;//数据个数
vector<int> fib={1,1};//斐波那契数列
Fib(fib);//初始化
while(cin >> number)
{
int temp;
while(number--)
{
cin >> temp;
printf("%04d",fib[temp]);
}
cout<<endl;
}
return 0;
}
以上是关于基础编程题之牛客网星际密码的主要内容,如果未能解决你的问题,请参考以下文章