- 相關推薦
阿里巴巴校招筆試題
①、C++
以下程序輸出結果是( )
class A
{
public:
virtual void func(int val = 1)
{
std::cout << "A->" << val << std::endl;
}
virtual void test()
{
func();
}
};
class B:public A
{
public:
void func(int val = 0)
{
std::cout << "B->" << val << std::endl;
}
};
int main(int argc,char* argv[])
{
B*p = new B;
p->test();
return 0;
}
A:A->0
B:B->1
C:A->1
D:B->0
答案:B
解析:由于p指向了繼承類B的對象,所以,在調用A中的test之后,虛函數func()會調用繼承類B的函數,而默認形參仍然會使用test所在的類A的形參1,從而輸出B->1,
阿里巴巴校招筆試題
。②、數學計算將1,2,3,......,99,100任意排列成一個圈,相鄰兩數的差的絕對值求和最多為( )
A:100
B:198
C:200
D:500
E:2500
F:5000
答案:F
解析:定義1-50為“小數”,51-100為“大數”,將“相鄰元素的差的絕對值之和”簡稱“絕差之和”。為了將絕差之和取最大,應該避免將“大數”和“大數”放在一起,
資料共享平臺
《阿里巴巴校招筆試題》(http://salifelink.com)。因此,可以考慮間隔排布。形成:1,100,2,99,3,98,4,97……,50,51的序列。而事實上,這個序列即絕差之和最大的序列。可使用如下證明:1、 如下圖所示:如果將小數和小數交換,得到的序列絕差之和不變。將小數x和y互換。假定交換之前,x和y的相鄰元素分別為a、b和c、d。則交換之前的絕差為:(a-x)+(b-x)+(c-y)+(d-y),交換之后的絕差為:(a-y)+(b-y)+(c-x)+(d-x),二者相等。
2、 如下圖所示:如果將大數和大數交換,得到的序列絕差之和不變。將大數a和b互換。假定交換之前,a和b的相鄰元素分別為x、y和z、w。則交換之前的絕差為:(a-x)+(a-y)+(b-z)+(b-w),交換之后的絕差為:(b-x)+(b-y)+(a-z)+(a-w),二者相等。
3、 如下圖所示:如果將大數和小數交換,得到的序列絕差之和必然減小。將小數a和大數z互換。假定交換之前,a和z的相鄰元素分別為x、y和b、c。則交換之前的絕差為:(a-x)+(a-y)+(b-z)+(c-z),交換之后的絕差為:|x-z|+|y-z|+|b-a|+|c-a|,由于x、y、z更接近,a、b、c更接近,所以交換后絕差變小。
因此,無論如何交換,絕差之和都無法增大。即原序列的絕差之和是最大的。它形成的絕差序列是99,98,97,96……,2,1,50,這100個數的和為5000。
③、計算機基礎
如果下列的公式成立:84*148=B6A8。則采用的是( )進制表示的。
A:15
B:11
C:12
D:14
E:16
F:以上都不對
答案:C
解析:1、常規做法:假定數值是x進制的,則寫出等式:(8x+4)*(x2+4x+8)=11x3+6x2+10x+8,化簡得到(3x2+6x+2)*(x-12)=0,則x的非負整數解為x=12。
2、“啟發式”做法:在十進制體系下,左側個位乘積4*8=32;右側個位為8,差32-8=24,從而進制必然是24的約數。只有C選項12是24的約數。
【阿里巴巴校招筆試題】相關文章:
騰訊校招筆試題08-08
騰訊校招筆試題目08-07
華夏銀行203年校招筆經09-05
阿里巴巴筆試題目09-11
阿里巴巴程序筆試題09-28
阿里巴巴秋招客戶端開發工程師在線筆試題10-26
農行校招的筆試經驗09-24
銀行校招經驗匯總10-21
工行校招筆試經驗11-07
交行校招筆試經驗08-10