當前位置:招聘信息大全網 - 招聘資訊 - 今天參加了壹家IT公司的面試,兩個開放式問題都沒拿到。誰能幫我解釋壹下答案和真相?

今天參加了壹家IT公司的面試,兩個開放式問題都沒拿到。誰能幫我解釋壹下答案和真相?

答:切換100次後,鎖是1,4,9,16...100,和* * * 10開放;

如果在走廊裏依次排列k把鎖,那麽在第k關之後,有鎖1,4,9,16...,| sqrt (k) |鎖已打開。

證明:100鎖標註為S1,S2,S3,...,Si,...,分別為S100。

S1只在1通中切換;

如果I是質數,si只在1和I次切換,切換次數為偶數;

如果I是壹個非平方數的復合,它總是可以分解成I = m * n = q * p =...= r * u (m!=n,q!=p,....,r!=u),si僅在時間1,I,m,n,q,p,...,r,u,並且切換次數是偶數;

如果I是平方數,I = m * n = q * p =...= r * u = x * x (m!=n,q!=p,....,r!=u),si只在第1,I,m,n,q,p,...、r、u、x次,切換次數為奇數;

切換前鎖頭是鎖著的,連切換幾次後鎖頭還是鎖著的;

切換前鎖是鎖著的,奇數切換後鎖變成開著的。

因此,只有當I是平方數時,鎖才會被打開。

算法:從解謎的操作步驟中,我們可以得到啟發,通過這種方式得到平方數。

步驟1:將數字的狀態值設置為-1;

第二步:根據這個模塊制作所有的數字1,2,3,...,100,如果結果為0,則改變狀態;

第三步:打印出狀態值為1的數字。

程序:下面是用這種方法求區間[1,100]的平方數的程序。代碼在vc++6.0平臺上運行成功。

/* *作者:制圖

日期:2007.2.15

FindSquareNumber。cpp**/

# include & ltiostream & gt

# include & ltprocess.h & gt

使用命名空間std

void main()

{

int a;

int I;

for(I = 1;我& lt= 100;i++)

{

a =-1;

for(int j = 1;j & lt= I;j++)

{

如果(i%j==0)

a =(-1)* a;

}

如果(a==1)

cout & lt& lt"平方數:" & lt& lt我& lt& ltendl

}

系統(“暫停”);

}