逛知乎,記乙個演算法的題目

2022-02-10 05:06:29 字數 1793 閱讀 4094

知乎鏈結是:

題目資訊:一副從1到n的牌,每次從牌堆頂取一張放桌子上,再取一張放牌堆底,直到手裡沒牌,最後桌子上的牌是從1到n有序,設計程式,輸入n,輸出牌堆的順序陣列

發現題目比較有意思,小時候還真這麼玩過,當時也是一張一張的試出來,然後秀給小夥伴們看,拿到題目自己就琢磨的開始寫**

static

void main(string

args)

temp =justagain(temp);

console.writeline(

string.join("

", temp));

}static

int justagain(int

list)

else

if (list[i] ==wantint)

}list[wantindex] =currentint;

list[currentindex] =wantint;

return

justagain(list);

}return

list;}}

static

bool justtest(int list, int tempcurrentint, out

int currentint, out

intwantint)

list[list.length - 1] =tempint;

}if (list[0] ==tempcurrentint)

//移除第一位數字

int tempnew = new

int[list.length - 1

];

for (int i = 0; i < tempnew.length; i++)

return justtest(tempnew, ++tempcurrentint, out currentint, out

wantint);

}else

}

寫的過程中發現了點小問題,基礎知識不夠紮實,本來傳遞的是list,後來發現list是引用型別,子方法裡操作完,實際記憶體位址裡的list資料也跟的會變,無奈改成了陣列操作。寫這個花了2小時,功力還是不夠。。。

原文中的微軟大佬說的暈頭轉向的,沒明白啥逆向解決

「取乙個1~n的陣列,這裡為了說明取n=5。按照題目中的規則變換,得到陣列:[1 3 5 4 2],將該陣列下標與值互換得到[1 5 2 4 3],即為答案。解釋:[1 3 5 4 2]的意義是,經過變換,原陣列中3號位置的數字現在2號槽,原陣列中5號位置的數字現在3號槽... 

現在已知變換後的槽存放的是1~n,故只需將下標與值互換即可得到待求陣列。

這道題還可以繼續擴充套件:

1.變換規則更複雜使得無法逆向模擬還原原陣列;

2.最終得到的序列可以擴充套件為任意序列。請大家以後不要黑微軟是養老院了」

但是樓主貌似沒理解全,問道你這些數字是陣列的下標嗎

後面這位微軟的程式設計師也補充了一下,括起來的所有元素都是實際的數字(題目中牌上的數字)。下標從1開始

直到看到輪子哥的解釋

譬如說一共有5張牌,12345那麼玩一遍的結果是24531,但是桌子上的牌是12345,假設原牌陣列是x,那麼顯然

x[2]=1

x[4]=2

x[5]=3

x[3]=4

x[1]=5

原來就是實際操作走一遍(所以是紙牌或者撲克),得到了真實的模擬資料,再根據角標互換原理,即可得出真實的序列,這方法太高了,真的是解決這道題的實踐+理論完美組合,微軟不是敬老院,我服。

知乎上關於祖傳的乙個回覆

祖傳的它為什麼好啊?祖傳的它禁得起考驗啊!你比方說,過年了,放鞭炮,它祖傳的吧?祖傳的啊!祖傳的好啊!一點,呲啦,砰!多喜慶!你說是不是?為什麼不拿黃色炸藥造鞭炮?為啥不拿tnt造鞭炮?為啥不拿濃縮鈾造鞭炮?因為鞭炮那是祖傳的啊!老祖宗發明的,祖祖輩輩傳下來的啊!可靠!不光可靠,那還是驕傲,用了那叫...

前端學習 仿寫乙個知乎頁面

並不適合 還是老老實實寫吧 冗談冗談 3.看一下注意的點 vertical align 用來指定行內元素 inline 或 單元格 table cell 元素的垂直對齊方式 注意 vertical align 只對行內元素 單元格元素生效 不能用它垂直對齊塊級元素 1.實現水平居中 div中img居...

知乎網首頁乙個延時互動的小思路

知乎首頁有個互動還蠻有意思,當使用者在左側頭像區選擇某個頭像的時候,右側內容區域會依據滑鼠在頭像所留經的時間來決定是否顯示所停留頭像的對應內容 今天簡單說下用jq完成這個互動的思路。先照例寫下html css,整倆div分別作為頭像元素和內容區域元素 div class touxiang 這裡是頭像...