腾讯2017实习生招聘在线笔试编程题(技术类-PC客户端开发)

二叉排序树

  对于一棵二叉排序树深度为K,节点数为 2k1 ,节点值为1至 2k1 。给出K和任意三个节点的值,输出包含该是三个节点的最小子树的根节点。

测试样例:

输入:
4 10 15 13

输出:
12

思路:
  一棵深度为4的满二叉排序树如所示:

腾讯2017实习生招聘在线笔试编程题(技术类-PC客户端开发)_第1张图片

  观察每层最开始节点值为 2i1 。找出输入的三个节点值中的最大值和最小值,循环除 2i1 ,直至结果不一致。最大值除 2i1 取整再乘 2i1 即为所求。

#include 
#include 
using namespace std;

int max(int a,int b,int c)
{
    return (a>b?a:b)>c?(a>b?a:b):c;
}
int min(int a,int b,int c)
{
    return (aint main()
{
    int k,a,b,c;
    cin>>k>>a>>b>>c;
    int i=k-1;

    int Max=max(a,b,c);
    int Min=min(a,b,c);

    while(i>=0)
    {   
        int left=Max/(int)pow(2.0,i);
        int right=Min/(int)pow(2.0,i);

        if(left!=right)
            break;
        i--;
     }
    int root=(int) (Max/(int)pow(2.0,i)*(int)pow(2.0,i));
    cout<return 0;
}

格式化输出

  编写代码,接收从屏幕输入的长度为16字节整数倍的字符串(均为可见字符),按示例格式排版输出。

测试样例:

输入:
abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijkl

输出:
16进制偏移        16进制表示(每行16个字符)*      原文*
   双空格分隔       双空格分隔        双空格分隔
00000000 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70 abcdefghijklmnop
00000010 71 72 73 74 75 76 77 78 79 7a 61 62 63 64 65 66 qrstuvwxyzabcdef
00000020 67 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76 ghijklmnopqrstuv
00000030 77 78 79 7a 61 62 63 64 65 66 67 68 69 6a 6b 6c wxyzabcdefghijkl

思路:
  难点在于字符串的转义和16进制偏移的输出,掌握printf()的格式化规定符即可解决。

#include 
#include  
#include 
using namespace std;

int main()
{
    string str;
    cin>>str;

    //16进制转义
    char *temp=new char [3*str.size()];//一个字符转义为2个数字和1个空格
    for(int i=0;isprintf(temp+3*i,"%x ",(int)str[i]);
    string res=temp;

    //输出
    unsigned int bais=0x00000000;
    for(int i=0;i16;i++)
    {
        printf("%08x  ",bais);
        cout<48,24)<<" ";
        cout<48+24,24)<<" ";
        cout<16,16)<0x00000010;
    }
    return 0;
}

  1. C语言 printf 格式化 输出 右对齐补零
  2. printf Type Field Characters
  3. Flag Directives

你可能感兴趣的:(2017春招)