星际密码 牛客网
链接: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;
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
