Home > Backend Development > PHP Tutorial > ABCCBA从1到9不同数字组成算法

ABCCBA从1到9不同数字组成算法

WBOY
Release: 2016-06-20 12:53:31
Original
1871 people have browsed it
ABCCBA从0到9不同数字组成算法
要求:ABC不重复
举例:012210、013310......019910。
   ......
   098890、097790......091190。
   ......
   980089、981189......987789。
   ......
   901109、902209......908809。等等
   

也就是能算出用 (0-9组成) 的所有 ABCCBA 不重复的 6位数。

可能会比较麻烦!希望高手能帮我解决一下。非常感谢。

本人不懂程序。能直接给出数字也行。当然最好能付上代码。


回复讨论(解决方案)

$a = Combination(range(0, 9), 3);foreach($a as $v) $r[] = join('', array_merge($v, array_reverse($v)));print_r($r);
Copy after login
Array(    [0] => 789987    [1] => 689986    [2] => 679976    [3] => 678876    [4] => 589985    [5] => 579975    [6] => 578875    [7] => 569965    [8] => 568865    [9] => 567765    [10] => 489984    [11] => 479974    [12] => 478874    [13] => 469964    [14] => 468864    [15] => 467764    [16] => 459954    [17] => 458854    [18] => 457754    [19] => 456654    [20] => 389983    [21] => 379973    [22] => 378873    [23] => 369963    [24] => 368863    [25] => 367763    [26] => 359953    [27] => 358853    [28] => 357753    [29] => 356653    [30] => 349943    [31] => 348843    [32] => 347743    [33] => 346643    [34] => 345543    [35] => 289982    [36] => 279972    [37] => 278872    [38] => 269962    [39] => 268862    [40] => 267762    [41] => 259952    [42] => 258852    [43] => 257752    [44] => 256652    [45] => 249942    [46] => 248842    [47] => 247742    [48] => 246642    [49] => 245542    [50] => 239932    [51] => 238832    [52] => 237732    [53] => 236632    [54] => 235532    [55] => 234432    [56] => 189981    [57] => 179971    [58] => 178871    [59] => 169961    [60] => 168861    [61] => 167761    [62] => 159951    [63] => 158851    [64] => 157751    [65] => 156651    [66] => 149941    [67] => 148841    [68] => 147741    [69] => 146641    [70] => 145541    [71] => 139931    [72] => 138831    [73] => 137731    [74] => 136631    [75] => 135531    [76] => 134431    [77] => 129921    [78] => 128821    [79] => 127721    [80] => 126621    [81] => 125521    [82] => 124421    [83] => 123321    [84] => 089980    [85] => 079970    [86] => 078870    [87] => 069960    [88] => 068860    [89] => 067760    [90] => 059950    [91] => 058850    [92] => 057750    [93] => 056650    [94] => 049940    [95] => 048840    [96] => 047740    [97] => 046640    [98] => 045540    [99] => 039930    [100] => 038830    [101] => 037730    [102] => 036630    [103] => 035530    [104] => 034430    [105] => 029920    [106] => 028820    [107] => 027720    [108] => 026620    [109] => 025520    [110] => 024420    [111] => 023320    [112] => 019910    [113] => 018810    [114] => 017710    [115] => 016610    [116] => 015510    [117] => 014410    [118] => 013310    [119] => 012210)
Copy after login

Combination 函数定义
function Combination( $arr, $num=0) {	$arr = array_values($arr);	$len = count($arr);	if($num == 0) $num = $len;	$res = array();	for($i=1,$n=pow(2, $len); $i<$n; ++$i) {		$tmp = str_pad(base_convert($i, 10, 2), $len, '0', STR_PAD_LEFT);		$t = array();		for($j=0; $j<$len; ++$j) {			if($tmp{$j} == '1') {				$t[] = $arr[$j];			}		}		if(count($t) == $num) $res[] = $t;	}	return $res;  }
Copy after login

如果 012210 和 021120 不算重复的话,可以这样写

for($a=0; $a<10; $a++)  for($b=0; $b<10; $b++)    for($c=0; $c<10; $c++)      if($a != $b && $a != $c && $b != $c) printf("%d%d%d%d%d%d\n", $a, $b, $c, $c, $b, $a);
Copy after login
012210013310014410015510016610017710018810019910021120023320024420025520026620027720......
Copy after login

谢谢!辛苦版主了.会编程真好.要是人工自己一个一个来.估计一天也搞不完.

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template