1. 程式人生 > >2018騰訊實習生招聘筆試題

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;
}