欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

腾讯秋招笔试题答案

程序员文章站 2022-06-09 11:03:30
...

1.

#include <iostream>
#include <string.h>
using namespace std;

char str[101];
int base[4];

int main()
{
    while(cin>>str)
    {
        int len = strlen(str);
        base[3] = 1;
        for(int i=2;i>=0;i--)
        {
            base[i] = base[i+1]*25+1;
        }

        int _index = 0;
        for(int j=0;j<len;j++)
        {
            _index += ((str[j]-'a')*base[j]+1);
        }
        cout<<_index-1<<endl;
    }
    return 0;
}
2.

#include <iostream>
using namespace std;

unsigned int arr[32];

int main()
{
    int id1, id2;
    while(cin>>id1>>id2)
    {
        int group1 = (id1-1)/32, group2 = (id2-1)/32;
        if(!(id2>=1&&id2<=1024))
        {
            cout<<-1<<endl;
            continue;
        }
        arr[group1] |= (1<<((id1-1)%32));
        cout<<( (arr[group2] & (1<<((id2-1)%32))) != 0)<<endl;
    }
    return 0;
}
3.

#include<iostream>
#include<math.h>
using namespace std;
bool isPrime(unsigned int num)
{
    for(int i=2;i<=sqrt(num);i++)
        if(num%i==0)
            return false;
    return true;
}

int main()
{
    unsigned int number;
    while(cin>>number)
    {
        unsigned int index=0;
        for(int i=2;i<=(number/2);i++)
        {
            if(isPrime(i))
                if(isPrime(number-i))
                    index++;
        }
        cout<<index;
    }
    return 0;
}
4.
#include<iostream>
using namespace std;
int main()
{
    double test;
    
    while(cin>>test)
    {
        int start=-90,end=90;
        for(int i=0;i<6;i++)
        {
            int mid=(int)((start+end)/2);
            if(test<mid)
            {
                end=mid;
                cout<<0;
            }
            else
            {
                start=mid;
                cout<<1;
            }
        }
    }
    return 0;
}
5.

在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同, 则称这种编码为格雷码(Gray Code),请编写一个函数,使用递归的方法生成N位的格雷码。

给定一个整数n,请返回n位的格雷码,顺序为从0开始。

测试样例:
1
返回:["0","1"]

class GrayCode {
public:
    vector<string> getGray(int n) {
        vector<string> v;  
        if(n == 1)  
        {  
            v.push_back("0");  
            v.push_back("1");  

            return v;  
        }  
        else  
        {  
            vector<string> v = getGray(n - 1);  
            int vSize = v.size();  

            vector<string> v2;  

            for(int i = 0; i < vSize; i++)  
            {  
                if(i % 2 == 0)  
                {  
                    v2.push_back(v[i]+"0");  
                    v2.push_back(v[i]+"1");  
                }  
                else  
                {  
                    v2.push_back(v[i]+"1");  
                    v2.push_back(v[i]+"0");  
                }  
            }  

            return v2;  
        } 
            // write code here
    }
};

6.

春节期间小明使用微信收到很多个红包,非常开心。在查看领取红包记录时发现,某个红包金额出现的次数超过了红包总数的一半。请帮小明找到该红包金额。写出具体算法思路和代码实现,要求算法尽可能高效。

给定一个红包的金额数组gifts及它的大小n,请返回所求红包的金额。

若没有金额超过总数的一半,返回0。
测试样例:
[1,2,3,2,2],5
返回:2

class Gift {
public:
    int getValue(vector<int> gifts, int n) {
        int result,value=0;
        for(int i = 0;i < n;++i){
            result=0;
            for(int j = 0;j < n;++j){
                if(j!=i)
                {
                    if(gifts[j]==gifts[i])
                    {
                        result++;
                        
                    }
                }
            }
            if(result>n/2)
            {
                value=gifts[i];
                break;
            }
    	}
        return value;
        // write code here
    }
};