火柴移動面試題

2021-09-07 02:46:21 字數 1859 閱讀 6577

最近我的乙個朋友找到了乙份工作,採訪公司,我們遇到了乙個火柴棍移動面試題,我覺得有點意思,在此拋磚引玉。

題目大致是這種:

乙個三個數的式子,移動當中一根火柴。使等式成立。用程式或實現(能夠用偽碼),輸出能成立的等式。

注:「+」能夠移走一根火柴變成「-」

比如:

廢話不說,直接上**,哪位網友有更好的方法,請分享一下,多謝

#include /* 定義操作符號,"+"或"-" */

#define symbol_error 0

#define symbol_add 1

#define symbol_minus 2

/* 定義變化標識,取值原則:3個中隨便取出n個相加不能等於當中乙個數 */

#define flag_no 0 /* 沒有移動 */

#define flag_minus 10 /* 去一根火柴 */

#define flag_add 100 /* 新增一根火柴 */

#define flag_self 1000 /* 拿一根放自己身上另外的位置 */

/* 定義合法移動 */

#define move_to_another 110 /* 10 + 100 + 0,乙個數拿一根,放到還有乙個數上 */

#define move_to_self 1000 /* 1000 + 0 + 0,自己拿一根放自己身上其它位置 */

#define move_from_plus 100 /* 100 + 0 + 0,從加號上拿一根放乙個數身上 */

/* 定義火柴移動結構體 */

typedef struct matchstick

match_stick_s;

/* 獲取乙個數不動或移動一根火柴後得到的數(僅僅列舉3和6,其它數值相似)

入參:指定的數(0-9)

出差:match_stick_s結構陣列

返回值:移動一根火柴得到的數的個數

*/int getdataaftermovestick(int idata, match_stick_s *pststick)

case 6:

default:

}return icount;

}/* 移動火柴

返回值:

symbol_error:非法移動

symbol_minus:從"+"上取一根加到某個數上

symbol_add: 不從"+"取火柴時,移動一根

*/char checkstickmove(int iflag1, int iflag2, int iflag3)

else if(move_from_plus == iflagsum)

return csymbol;

}/* 滿足移動規則,並能使等式成立的,列印出來 */

void printresult(match_stick_s *pststick1, match_stick_s *pststick2, match_stick_s *pststick3)

else if((symbol_minus == csymbol) && (idata3 == idata1 - idata2))

return;

}/* 處理火柴移動 */

void dealstickmove(int idata1, int idata2, int idata3)}}

return;

}int main()

執行結果:

3 + 0 = 3

9 - 6 = 3

火柴棍移動的一道面試題

最近有朋友找工作,面試某公司,遇到乙個火柴棍移動的面試題,感覺有點意思,在此拋磚引玉。題目大致是這樣的 乙個三個數的式子,移動其中一根火柴,使等式成立,用程式或實現 可以用偽碼 輸出能成立的等式。注 可以移走一根火柴變成 例如 廢話不說,直接上 哪位有更好的方法,請分享一下,多謝 include 定...

移動端面試題 一

公司人慢慢都走了,所以我也託同事內推一家公司,很久很久沒有面試,很少複習這些面試題,感覺自己屬於會寫不會說的人,好好準備一下面試,爭取通過 加油吧 流式布局 也就是百分比布局 viewport 使用非固定畫素來定義網頁內容,通過盒子的寬度設定成百分比來根據螢幕的寬度來進行伸縮,不受固定畫素的限制,內...

「火柴棍式」程式設計師面試題

下面是乙個c程式,其想要輸出20個減號,不過,粗心的程式設計師把 寫錯了,你需要把下面的 修改正確,不過,你只能增加或是修改其中的乙個字元,請你給出三種答案。int n 20 for int i 0 i n i 答案 第一種解法 在for迴圈中給 i 加乙個負號 for int i 0 i n i ...