C++星际密码

星际密码

链接:星际密码

星际战争开展了100年之后,NowCoder终于破译了外星人的密码!他们的密码是一串整数,通过一张表里的信息映射成最终4位密码。表的规则是:n对应的值是矩阵X的n次方的左上角,如果这个数不足4位则用0填充,如果大于4位的则只输出最后4位。

|1 1|^n => |Xn …|

|1 0| |… …|

例如n=2时,

|1 1|^2 => |1 1| * |1 1| => |2 1|

|1 0| |1 0| |1 0| |1 1|

即2对应的数是“0002”。

#include
#include
using namespace std;

int main(){
 int* fei = new int[10001];//数据量比较大,建议放在堆上
 fei[0] = 1;//让斐波那契数列从1开始才可以跟输出对的上
 fei[1] = 1;
 //构建斐波那契数列
 for (int i = 2; i < 10001; i++) {
  fei[i] = fei[i - 1] + fei[i - 2];
  fei[i] %= 10000;  //超过四位的只保留下最后四位数,这么做也是为了防止超过int的表示范围
 }
 int n = 0;
 int i;
 while (cin >> n) {
  //接收数据
  vector<int> arr(n);
  for (i = 0; i < n; i++) {
   cin >> arr[i];
  }
  //循环打印指定的第几个斐波那契数列,注意格式
  for (i = 0; i < n; i++) {   
   printf("%04d", fei[arr[i]]);
  }
  cout << endl;
 }
 return 0;
}

你可能感兴趣的:(C++)