星际密码 牛客网

链接:https://www.nowcoder.com/questionTerminal/34f17d5f2a8240bea661a23ec095a062?toCommentId=47888
来源:牛客网
 

星际战争开展了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”。

 

输入描述:

输入有多组数据。
每组数据两行:第一行包含一个整数n (1≤n≤100);第二行包含n个正整数Xi (1≤Xi≤10000)


 

输出描述:

对应每一组输入,输出一行相应的密码。

示例1

输入

6
18 15 21 13 25 27
5
1 10 100 1000 10000

输出

418109877711037713937811
00010089410135017501

 

 

思路:

正整数:                            1  2  3  4  5....

X的n次方的左上角的数:  1  2  3  5  8....

这是一个斐波那契数列。

所以重点就在于将不足1000的数字,写成四位数。

我们可以用 to_string  将数字转化成字符串  相应位置补0就可以了。

代码


#include
#include
#include
using namespace std;int main()
{int x;while (cin >> x){vector arr;for (int i = 0; i < x; i++){int y = 0;cin >> y;arr.push_back(y);}vector arr1(100001, 0);arr1[0] = 0;arr1[2] = 2;arr1[1] = 1;for (int i = 3; i < 100001; i++){arr1[i] = (arr1[i - 1]) % 10000 + (arr1[i - 2]) % 10000;if (arr1[i] >= 10000)arr1[i] %= 10000;}string ret;for (int i = 0; i < x; i++){int a = arr1[arr[i]];string b;if (a < 1000){string as = to_string(a);for (int j = 0; j < 4 - as.size(); j++){b += "0";}b += as;}elseb = to_string(a);ret += b;}cout << ret << endl;}return 0;
}

 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部