最近碰到這樣一道演算法題:
a--i 為 1--9 的數字,且不重複,求a--i為何值時,三條線上的四個數字之和相等,
即 a+b+c+d = d+e+f+g = g+h+i+a
最初思路:
1、a -- i ,是1--9的數字,且不能重複,其實第乙個數字是 c9取1,第二個數字是 c8取1,第三個數字為 c7取1 ... 即最終能夠組合成 a9取9 ,即 362880 組資料。
2、362880 組資料中,找出符合 a+b+c+d = d+e+f+g = g+h+i+a ,即為結果資料
3、dataary 儲存每組的這 9 個數字,usedary 儲存已經使用的數字。
實踐:
/**
獲取符合條件的數
@param index 當前數的位置
@param count 總數
*/- (void)dealdatawithindex:(nsinteger)index count:(nsinteger)count
if (index == count)
return;
}for (int i=0; i
其中,判斷當前9個數是否符合要求的演算法為:
- (bool)sumdidequal
for (int i=3; i<=6; i++)
for (int i=6; i
在檢視裡呼叫:
- (void)viewdidload
結果:由於資料量比較大,執行時,會花一定時間。
結果如下,總組數符合**,符合條件的一共有 864 組資料:
totalcount = 362880;//總組數
resultcount = 864; // 符合條件的組數
ps:後來無意中發現,這裡有對此題的c++演算法實現。分析了下,思路差不多,唯一的區別就是,他重複陣列裡儲存的是 bool 值來記錄當前值是否已經被使用。以下,是我按照他的思路更改的**,最終結果都是一樣的。
/**
獲取符合條件的數
@param index 當前數的位置
@param count 總數
*/- (void)dealdatawithindex:(nsinteger)index count:(nsinteger)count{
if (!usedary) {
usedary = [nsmutablearray arraywithcapacity:count];
dataary = [nsmutablearray arraywithcapacity:count];
resultcount = 0;//符合要求的總數
totalcount = 0;//總數
//初始儲存
for (int j=0; j
4個數字計算24點java演算法(附原始碼)
今天看到乙個帖子說程式設計師面試考24點演算法,想為什麼不用程式來實現呢。在網上沒有找到非常完美的演算法,包括那個24點計算器,給出的結果重複的也較多。所以自己寫了乙個。在這兒貼出來給大家分享一下。附原始碼。給出4個1 10之間的數字,使用加 減 乘 除和括號列出乙個計算結果為24的算式。比如 3 ...
三個數之和,最接近目標數的演算法python實現
1.給定乙個陣列和目標數,求陣列中三個數之和最接近目標數的和,假設陣列至少有一組和滿足條件。nums.sort l len nums sum nums 0 nums 1 nums 2 for i in range 0,l 2 if nums i nums i 1 continue next i 1 ...
4個數字能組成互不相同且無重複數字的三位數?
4個數字 1,2,3,4 能組成多少個互不相同且無重複數字的三位數?各是多少?import time starttime time.clock digits 1,2,3,4 原始數字 threedigits n 0for i in digits 百 for j in digits 十 for k i...