騰訊秋招筆試題答案
阿新 • • 發佈:2019-02-03
1.
2.#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; }
3.#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; }
4.#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; }
#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
}
};