本帖最后由 ggggwhw 于 2009-12-29 09:10 编辑
发现用Table会出现内存不够的提示,后来修改后内存够了,但是还有一步判断很难进行:- brr = Select[Subsets[Range[1, 9], 3], Length[#] > 2 &];
- lenb = Length[brr];
- brr = Sort[Flatten[Table[Permutations[brr[[i]]], {i, 1, lenb}], 1]];
- lenb = Length[brr];
- brr = Table[{brr[[i, 1]], brr[[i, 2]], brr[[i, 3]],
- brr[[i, 1]]/(10 brr[[i, 2]] + brr[[i, 3]])}, {i, 1, lenb}];
- brr = Sort[brr, #1[[4]] < #2[[4]] &];
- crr = Table[brr[[i, 4]], {i, 1, lenb}];
- lenc = Length[Select[crr, # <= 1/3 &]];
- lend = lenb + 1 - Length[Select[crr, # >= 1/3 &]];
- drr = Delete[
- Union[Flatten[
- Table[If[
- crr[[i]] + crr[[j]] + crr[[k]] == 1, {crr[[i]], crr[[j]],
- crr[[k]]}, 0], {i, 1, lenb}, {j, lend, lenb}, {k, i + 1,
- j - 1}], 2]], 1]
复制代码
后来改用For循环,发现内存不是问题,速度明显跟不上:
- brr = Select[Subsets[Range[1, 9], 3], Length[#] > 2 &];
- brr = Sort[
- Flatten[Table[Permutations[brr[[i]]], {i, 1, Length[brr]}], 1]];
- lenb = Length[brr];
- brr = Table[{brr[[i, 1]], brr[[i, 2]], brr[[i, 3]],
- brr[[i, 1]]/(10 brr[[i, 2]] + brr[[i, 3]])}, {i, 1, lenb}];
- brr = Sort[brr, #1[[4]] < #2[[4]] &];
- lenc = Length[Select[brr, #[[4]] <= 1/3 &]];
- lend = lenb + 1 - Length[Select[brr, #[[4]] >= 1/3 &]];
- rang = Range[9];
- For[i[1] = 1, i[1] <= lenc, i[1]++,
- For[i[2] = i[1] + 1, i[2] <= lenb, i[2]++,
- For[i[3] = i[1] + 1, i[3] < i[2], i[3]++,
- If[brr[[i[1], 4]] + brr[[i[2], 4]] + brr[[i[3], 4]] == 1,
- If[Union[
- Flatten[Table[{brr[[i[j], k]]}, {j, 1, 3}, {k, 1, 3}]]] ==
- rang, Print[Table[{brr[[i[j], k]]}, {j, 1, 3}, {k, 1, 3}]]]
- ]
- ]
- ]
- ]
复制代码
不过5分钟内总算算完了.具体时间不知道没有测定.
输出结果是:
- {{{7},{6},{8}},{{9},{1},{2}},{{5},{3},{4}}}
复制代码
即满足条件的数字是:
7/68+9/12+5/34=1 |