星际密码 牛客网

链接: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<iostream>
#include<string>
#include<vector>
using namespace std;

int main()
{
	int x;
	while (cin >> x)
	{
		vector<int> arr;
		for (int i = 0; i < x; i++)
		{
			int y = 0;
			cin >> y;
			arr.push_back(y);
		}
		vector<int> 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;
			}
			else
				b = to_string(a);
			ret += b;
		}
		cout << ret << endl;
	}
	return 0;
}

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值