最近我的乙個朋友找到了乙份工作,採訪公司,我們遇到了乙個火柴棍移動面試題,我覺得有點意思,在此拋磚引玉。
題目大致是這種:
乙個三個數的式子,移動當中一根火柴。使等式成立。用程式或實現(能夠用偽碼),輸出能成立的等式。
注:「+」能夠移走一根火柴變成「-」
比如:
廢話不說,直接上**,哪位網友有更好的方法,請分享一下,多謝
#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 ...