首页 > 代码库 > 火柴棍移动的一道面试题
火柴棍移动的一道面试题
最近有朋友找工作,面试某公司,遇到一个火柴棍移动的面试题,感觉有点意思,在此抛砖引玉。
题目大致是这样的:
一个三个数的式子,移动其中一根火柴,使等式成立,用程序或实现(可以用伪码),输出能成立的等式。
注:“+”可以移走一根火柴变成“-”
例如:
废话不说,直接上代码,哪位网友有更好的方法,请分享一下,多谢
#include <stdio.h> /* 定义操作符号,"+"或"-" */ #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 { int iFlag; /* 变化标识 */ int iData; /* 火柴表示的数 */ }MATCH_STICK_S; /* 获取一个数不动或移动一根火柴后得到的数(只列举3和6,其他数值类似) 入参:指定的数(0-9) 出差:MATCH_STICK_S结构数组 返回值:移动一根火柴得到的数的个数 */ int getDataAfterMoveStick(int iData, MATCH_STICK_S *pstStick) { int iCount = 0; switch(iData) { case 3: { pstStick[0].iFlag = FLAG_NO; pstStick[0].iData = http://www.mamicode.com/3; /* 不动 */>
运行结果:
3 + 0 = 3
9 - 6 = 3
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。