填空题
**问题:**小明用字母A对应数字1,B对应数字2,以此类推,用Z对应26,。对于27以上的数字,小明用两位或更长位的字符串来对应,例如AA对应27,AB对应28,AZ对应52,LQ对应329
请问2019对应的字符串是什么?
27-702为AA-ZZ
#include<iostream>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std;
int main()
{
int n; //数的第n个数字
cin>>n;
vector<int> number;
number.push_back(0); //初始存0
for(int i=0;i<n-1;i++) //A往后移n-1位
{
number[0]++;
for(int j=0;number[j]==26;j++) //等于最后一位的后一个;进位
{
number[j]=0;
if(j+1==number.size())number.push_back(0); //越界,下一位从0开始数
else
number[j+1]++;
}
}
for(int i=number.size()-1;i>=0;i--)
cout<<char('A'+number[i]);
cout<<endl;
}
答案为:BYQ
问题:完全二叉树权值
给定一棵包含N个节点的完全二叉树,书上的每个节点都有一个权值,按从上到下、从左到右的顺序依次是A1,A2,…AN,如下图所示
现在小明要把相同深度的节点的权值加在一起,他想知道哪个深度的节点的权值之和最大?如果有多个深度的权值和同为最大,请你输出其中最小的深度。
注:根的深度是1.
输入格式:
第一行包含一个整数N
第二行包含N个整数A1,A2,…AN
输出格式;一个整数
评测规模:对于所有评测用例,1<=N<=100000,-100000<=Ai<=100000
#include<iostream>
#include<algorithm>
#include<vector>
#include<limits.h>
using namespace std;
typedef long long LL;
int main()
{
int n;
cin>>n;
LL maxv=INT_MIN; //维护当前最大的和 为负数
LL maxv_d=0; //深度为0,更新层
for(int i=0,length=1,depth=1;i<n;depth++,length*=2) //当前层的长度
{ //完全二叉树最后一层不一定满
LL s=0; //当前的层的和
for(int j=0;j<length && i<n;j++,i++)
{
int x;
cin>>x;
s+=x;
}
if(s>maxv) //如果当前权值和大于maxv
{
maxv=s;
maxv_d=depth;
}
}
cout<<maxv_d<<endl;
return 0;
}