華為2015機試 最後一題 等式變換

2021-07-10 14:42:14 字數 881 閱讀 5392

第三題:等式變換

輸入乙個正整數x,在下面的等式左邊的數字之間新增+號或者-號,使得等式成立。

1 2 3 4 5 6 7 8 9 = x

比如:12-34+5-67+89 = 5

1+23+4-5+6-7-8-9 = 5

請編寫程式,統計滿足輸入整數的所有整數個數。

輸入:       正整數,等式右邊的數字

輸出:       使該等式成立的個數

樣例輸入:5

樣例輸出:21

解:採用列舉的解法。 字串「123456789」 若想在其中插入運算子,一共有8個空位可插入。每個空位插入情況有3種:不插入、插入-、插入+。我們可以用數字0,1,2分別表示3種插入情況。然後使用int ope[8] 來儲存每個空位的插入情況。這道題的關鍵是如何去列舉每種情況呢?讀者可先自己思考下,再看答案。

我的解法是採用3進製的位運算來儲存。比如 00 000 201 表示在第6、8位分別插入 +號、-號,轉換為十進位制的值 = 2*(3^2) + 1 = 19.  我們只需要遍歷3進製的 00 000 000 到 22 222 222,即十進位制的0~3^8-1 即可列舉所有情況。想到了這點,後面的編碼部分就不難了。直接看**吧。

#include using namespace std;

char str[20] = "123456789";

long getnum(int low, int high)

return tmp;

}int main(int argc, const char * argv) ; //運算子存於 ope[0]-ope[7], ope[8]

int ans = 0;

int len = 3*3*3*3*3*3*3*3;

for(int i=0;i

2014華為機試最後一題 萬用字元匹配。

題目就是輸入兩個字串,長度小於20,第乙個包含 或者?的萬用字元,在第二個字串中找出最早的匹配位置。可以代替乙個或者多個字元,代替乙個字元。示例 輸入 和asdfsdf sdfasdf,返回6.include include using namespace std int getnext char ...

華為機試真題 2014 63 等式變換

題目 輸入乙個正整數x,在以下的等式左邊的數字之間加入 號或者 號,使得等式成立。1 2 3 4 5 6 7 8 9 x 比方 12 34 5 67 89 5 1 23 4 5 6 7 8 9 5 請編敲 統計滿足輸入整數的全部整數個數。輸入 正整數。等式右邊的數字 輸出 使該等式成立的個數 例子輸...

2015華為校園招聘機試模擬題及解答

1 模擬n個人參加選舉的過程,並輸出選舉結果 假設候選人有四人,分別用 a b c d 表示,選舉時開始計票,若輸入的不是 a b c d 則視為無效票。選舉結束後獲取各個候選人的得票數以及無效票的個數,輸出結果以新增候選人的順序進行順序輸出,最後一行為無效的數量。同時getvoteresult命令...