2018腾讯实习生招聘笔试题

1 假定一种编码的编码范围是a ~ y的25个字母,从1位到4位的编码,如果我们把该编码按字典序排序,形成一个数组如下: a, aa, aaa, aaaa, aaab, aaac, … …, b, ba, baa, baaa, baab, baac … …, yyyw, yyyx, yyyy 其中a的Index为0,aa的Index为1,aaa的Index为2,以此类推。 编写一个函数,输入是任意一个编码,输出这个编码对应的Index.

输入描述:

输入一个待编码的字符串,字符串长度小于等于100.

输出描述:

输出这个编码的index

示例1

输入

baca

输出

16331

思路:两层for循环,一层编码长度,一层当前位数,找规律发现该编码每次加n*25^j,n是当前位字母编码是第几个,j是当前位数的第几位。
#include <iostream>
#include <string>
#include <cmath>
using namespace std;


int main()
{
    string s;
    cin>>s;
    int len = s.length();
    int index = 0,i,j;
    for(i = 0; i < len; ++i,++index)
    {
        int n = s[i] - 'a';
        for(j = 0; j <4-i; ++j)
        {
            index += n*pow(25,j);
        }
    }
    cout<<index-1<<endl;
    cout<<sizeof(A)<<endl;
    return 0;
}

2.
【题目描述】游戏里面有很多各种各样的任务,其中有一种任务玩家只能做一次,这类任务一共有 1024 个, 任务 ID 范围[1,1024].请用 32 个 unsigned int 类型来记录着 1024 个任务是
否已经完成。初始状态为未完 成。
输入两个参数,都是任务 ID,需要设置第一个 ID 的任务为已经完成;并检查第二个 ID 的任务是否已经完 成。
输出一个参数,如果第二个 ID 的任务已经完成输出 1,如果未完成输出 0,。如果第一或第二个 ID 不在 [1,1024]范围,则输出 1.
如:
输入:
1024 1024
输出:
1
测试用例:
1、
输入:1024 1024 输出:1
2、
输入:1024 1023 输出:0
3、
输入:1022 1025 输出:-1
因为一个unsigned int的刚好是32位,32个unsigned int类型刚好是1024位。所以用位运算即可。

#include <bits/stdc++.h>
using namespace std;


int main()
{
    int a,b;
    cout<<sizeof(a)<<endl;
    cin>>a>>b;
    if(a < 1 || a > 1024 || b < 1 || b > 1024)
    {
        cout<<-1<<endl;
        return 0;
    }
    int index,temp;
    unsigned int count[32] = {0};
    index = (a-1)/32;
    temp = (a-1)%32;
    count[index] |= 1<<temp;

    index = (b-1)/32;
    temp = (b-1)%32;

    if(count[index] & 1<<temp)
        cout<<1<<endl;
    else
        cout<<-1<<endl;
    return 0;
}

3.质数对
【题目描述】给定一个正整数,编写程序计算有多少对质数的和等于输入的这个正整数,并输

出结果。输入 值小于 1000。如,输入为 10,程序应该输出结果为 2。(共有两对质数的和为 10,分别为(5,5)(3.7))

#include <iostream>
#include <cmath>
using namespace std;

bool IsPrimer(int numbers)
{
    if(numbers <= 1)
        cout<<"numbers error"<<endl;
    if(numbers % 2 == 0)
        return false;
    for(int i = 3; i <= sqrt(numbers); ++i)
    {
        if(numbers%i == 0)
            return false;
    }
    return true;
}


int main()
{
    int sum  = 0;
    int num;
    cin>>num;
    for(int i = 3; i <= num/2; ++i)
    {
        if(IsPrimer(i) && IsPrimer(num-i))
            sum++;
    }
    cout<<sum<<endl;
    return 0;
}
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值