2023春季伴学挑战赛06C++语言:T3 数字游戏《2048》

数字游戏《2048》

题目描述

有一款数字合成的游戏,叫做《2048》:玩家会得到很多数字,每个数字都是 2 的幂,玩家可以挑选两个一样大的数字,将它们合成一个新的数字,新数字为原数字的两倍大小。如果这种合成操作可以不断地进行,给定小爱在最初获得的数字集合,请帮她算一下能够获得的最大数字。

2 的幂是指多个2相乘的结果。如 4是2的2次方、256是2的8次方 等等。

输入格式

第一行:单个正整数 n(1≤n≤100),表示小爱一开始拥有的数字数量;

第二行:n 个正整数 a1,a2,⋯,an,表示刚开始时获得的数字,保证每个数字都是 2 的幂。

输出格式

单个正整数:表示最后可以得到的最大数字大小。(数据保证可以合成的最大数字不超过2048)

样例 #1

样例输入 #1

5
4 1 2 1 1

样例输出 #1

8

提示

【样例说明】

原序列中的两个’1’可以合成’2’,新合成的’2’与原序列中的’2’可以继续合成’4’,新合成的’4’与原序列中的’4’可以继续合成’8’。

当前序列中只剩下了’1’和’8’,可以得到的最大数字是8。

#include 
using namespace std;
int h[2050];
int main()
{
	int n,x;
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		cin>>x;
		h[x]++;
	}
	for(int i=1;i<=1024;i*=2)
	{
		h[i*2]+=h[i]/2;
	}
	for(int i=2048;i>=1;i--)
	{
		if(h[i]!=0)
		{
			cout<

你可能感兴趣的:(编程,算法,蓝桥杯,职场和发展)