首页 > 代码库 > 火柴棍移动的一道面试题

火柴棍移动的一道面试题

最近有朋友找工作,面试某公司,遇到一个火柴棍移动的面试题,感觉有点意思,在此抛砖引玉。


题目大致是这样的:

一个三个数的式子,移动其中一根火柴,使等式成立,用程序或实现(可以用伪码),输出能成立的等式。

注:“+”可以移走一根火柴变成“-”

例如:



废话不说,直接上代码,哪位网友有更好的方法,请分享一下,多谢

#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