移動火柴棒判斷等式是否成能成立

來源:互聯網
上載者:User

標籤:error   並且   變化   efi   loop   str   log   標識   default   

 

1: 從鍵盤讀入一個式子(該式子肯定是一個不成立的等式)。 
2:判斷,是否可以移動一根木棒可以使等式成立,則輸出新的等式,否則輸出No。 

a.式子中的數只能是正數,運算子號只會出現加號和減號,並且有且僅有一個等號,不會出現括弧、乘號或除號,也不會有++,--,+-或-+出現。 
b.式子中只能是整數,並且小於10
c.你不能移動=的木棒,所以加號、減號、等號是不會改變的。移動前後,木棒構成的數字必須嚴格與電腦器中顯示的效果一致。 
d.從鍵盤讀入的式子中的數不會以0開頭,但允許修改後等式中的數以數字為開頭。 

#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 = 3;   /* 不動 */              pstStick[1].iFlag = FLAG_ADD; pstStick[1].iData = 9;  /* 加一根 */              pstStick[2].iFlag = FLAG_SELF; pstStick[2].iData = 2; /* 自己移動一根 */              pstStick[3].iFlag = FLAG_SELF; pstStick[3].iData = 3;              pstStick[4].iFlag = FLAG_SELF; pstStick[4].iData = 5;              iCount = 5;              break;          }          case 6:          {              pstStick[0].iFlag = FLAG_NO; pstStick[0].iData = 6;    /* 不動 */              pstStick[1].iFlag = FLAG_ADD; pstStick[1].iData = 8;   /* 加一根 */              pstStick[5].iFlag = FLAG_MINUS; pstStick[5].iData = 5; /* 減一根 */              pstStick[2].iFlag = FLAG_SELF; pstStick[2].iData = 0;  /* 自己移動一根 */              pstStick[3].iFlag = FLAG_SELF; pstStick[3].iData = 6;              pstStick[4].iFlag = FLAG_SELF; pstStick[4].iData = 9;                          iCount = 6;              break;          }          default:          {              break;          }      }            return iCount;  }    /* 移動火柴    傳回值:    SYMBOL_ERROR:非法移動    SYMBOL_MINUS:從"+"上取一根加到某個數上    SYMBOL_ADD:  不從"+"取火柴時,移動一根  */  char checkStickMove(int iFlag1, int iFlag2, int iFlag3)  {      char cSymbol = SYMBOL_ERROR;      int iFlagSum = iFlag1 + iFlag2 + iFlag3;            if((MOVE_TO_ANOTHER == iFlagSum) || (MOVE_TO_SELF == iFlagSum))      {          cSymbol = SYMBOL_ADD;      }      else if(MOVE_FROM_PLUS == iFlagSum)      {          cSymbol = SYMBOL_MINUS;      }            return cSymbol;  }    /* 滿足移動規則,並能使等式成立的,列印出來 */  void printResult(MATCH_STICK_S *pstStick1, MATCH_STICK_S *pstStick2, MATCH_STICK_S *pstStick3)  {      int iFlag1 = pstStick1->iFlag;      int iFlag2 = pstStick2->iFlag;      int iFlag3 = pstStick3->iFlag;      int iData1 = pstStick1->iData;      int iData2 = pstStick2->iData;      int iData3 = pstStick3->iData;            char cSymbol = checkStickMove(iFlag1, iFlag2, iFlag3);            if((SYMBOL_ADD == cSymbol) && (iData3 == iData1 + iData2))      {          printf("%d + %d = %d\n", iData1, iData2, iData3);      }      else if((SYMBOL_MINUS == cSymbol) && (iData3 == iData1 - iData2))      {          printf("%d - %d = %d\n", iData1, iData2, iData3);      }            return;  }    /* 處理火柴移動 */  void dealStickMove(int iData1, int iData2, int iData3)  {      unsigned long ulLoop1, ulLoop2, ulLoop3;         int iCount1, iCount2, iCount3;      MATCH_STICK_S astStick1[10];      MATCH_STICK_S astStick2[10];      MATCH_STICK_S astStick3[10];            iCount1 = getDataAfterMoveStick(iData1, astStick1);      iCount2 = getDataAfterMoveStick(iData2, astStick2);      iCount3 = getDataAfterMoveStick(iData3, astStick3);            for(ulLoop1 = 0; ulLoop1 < iCount1; ulLoop1++)      {          for(ulLoop2 = 0; ulLoop2 < iCount2; ulLoop2++)          {              for(ulLoop3 = 0; ulLoop3 < iCount3; ulLoop3++)              {                  printResult(&astStick1[ulLoop1], &astStick2[ulLoop2], &astStick3[ulLoop3]);              }          }      }        return;  }    int main()  {      dealStickMove(3, 6, 3);            return 0;  }  

 

移動火柴棒判斷等式是否成能成立

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.