C 試玩 華為機試練習題 44 24點遊戲演算法

2021-10-05 13:41:05 字數 3544 閱讀 5215

其實嘛~題目說明挺簡單明瞭的,數字可以重複,但沒說不能換順序,考慮【先乘除後加減】因素時可以用排列組合解決,而先算哪個在於【乘/除號】、【括號】的位置在**

例如:1個乘除號:

【1 * 2 + 3 + 4】→①;

【1 + 2 * 3 + 4】→【2 * 3 + 1 + 4】→①;

【( 1 + 2 ) * ( 3 + 4 ) 】→②;

【1 + 2 + 3 * 4】→【3 * 4 + 1 + 2】→①;

2個乘除號:

【1 + 1 * 1 * 1】→【 1 * 1 * 1 + 1】→①;

【1 * 1 + 1 * 1】→②;

【1 * 1 * 1 + 1】→①;

3個乘除號:

【1 * 1 * 1 * 1 】→①;

所以這4個數只有兩種運算模式

①.(ab)cd / (abc)d:

乙個乙個往後面運算;

②.(ab)(cd)

兩兩運算

int resultcount =0;

// 總結果數

int resultcount_1 =0;

// 方式1結果數

int resultcount_2 =0;

// 方式2結果數

list<

string

> readlinestrings =

newlist

<

string

>()

;for

(int i =

1; i <

11; i++

)// 窮舉收集所有符合的4個數字組合}}

}foreach

(var readlinestring in readlinestrings)

list<

double

> numberarrays =

newlist

<

double>()

;for

(int i =

0; i < intarray.length; i++

)// 數字不同順序排列組合);

}}}}

}}}string

operationsymbols =

newstring

;// 運算符號集合

double result =0;

foreach

(double

numberarray in numberarrays)

switch

(operationsymbols[j]

)switch

(operationsymbols[k])if

(result ==24)

else

stringbuilder.

(operationsymbols[j]);

stringbuilder.

(" ");

stringbuilder.

(numberarray[2]

);if(

(operationsymbols[k]

=="*"

|| operationsymbols[k]

=="/")&&

(operationsymbols[j]

=="+"

|| operationsymbols[j]

=="-"))

else

stringbuilder.

(operationsymbols[k]);

stringbuilder.

(" ");

stringbuilder.

(numberarray[3]

);stringbuilder.

(" = 24");

console.

writeline

(stringbuilder)

; resultcount_1++

; resultcount++;}

elseif(

(operationsymbols[i]

=="+"

|| operationsymbols[i]

=="-")&&

(operationsymbols[j]

=="*"

|| operationsymbols[j]

=="/")&&

(operationsymbols[k]

=="+"

|| operationsymbols[k]

=="-"))

double result2 =0;

switch

(operationsymbols[k]

)switch

(operationsymbols[j])if

(result ==24)

}elseif(

(operationsymbols[i]

=="*"

|| operationsymbols[i]

=="/")&&

(operationsymbols[j]

=="+"

|| operationsymbols[j]

=="-")&&

(operationsymbols[k]

=="*"

|| operationsymbols[k]

=="/"))

double result2 =0;

switch

(operationsymbols[k]

)switch

(operationsymbols[j])if

(result ==24)

}}}}

}}console.

writeline

("resultcount="

+ resultcount)

; console.

writeline

("resultcount_1="

+ resultcount_1)

; console.

writeline

("resultcount_2="

+ resultcount_2)

; console.

readkey()

;

ps.迴圈**裡面【 && result != 24】的條件是為了排除一些重複的判定組合,例如:

2 * 3 * 4 * 1

2 * 3 * 4 / 1

因為題目只要是判斷出來當前的4個數字的組合能夠運算出24即可

用這段**遍歷所有數字和運算符號大概要≈6秒的樣子

聽說有些更牛x的24點…

( 1 + 1 + 1 + 1 ) ! = 24

這就更複雜了,這說法運算出24和4都行,而且0!=1…

華為機試練習題1

題目描述 有這樣一道智力題 某商店規定 三個空汽水瓶可以換一瓶汽水。小張手上有十個空汽水瓶,她最多可以換多少瓶汽水喝?答案是5瓶,方法如下 先用9個空瓶子換3瓶汽水,喝掉3瓶滿的,喝完以後4個空瓶子,用3個再換一瓶,喝掉這瓶滿的,這時候剩2個空瓶子。然後你讓老闆先借給你一瓶汽水,喝掉這瓶滿的,喝完以...

華為機試練習題 28 報數

題目 描述 有n個人圍成一圈,順序排號。從第乙個人開始報數 從1到3報數 凡報到3的人退出,問最後留下的那位是原來第幾號。題目類別 陣列,指標難度 初級執行時間限制 10sec記憶體限制 128mbyte階段 入職前練習輸入 使用標準輸入stdio.多行,每行一組資料。輸出 多行,每行對應求和結果。...

華為機試練習題 18 矩陣相乘

題目 描述 題目描述 矩陣相乘 輸入 兩個n n階矩陣相乘 輸出 結果矩陣 樣例輸入 樣例輸出 介面說明 原型 int matrix int matrixa,int matrixb,int matrixc,int n 輸入引數 int matrixa 指向二維陣列a int matrixb 指向二維...