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

qq862022092 2015-07-03 09:34:25
ABCCBA从0到9不同数字组成算法
要求:ABC不重复
举例:012210、013310......019910。
   ......
   098890、097790......091190。
   ......
   980089、981189......987789。
   ......
   901109、902209......908809。等等
   

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

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

本人不懂程序。能直接给出数字也行。当然最好能付上代码。
...全文
204 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuzuning 2015-07-03
  • 打赏
  • 举报
回复
如果 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);
012210
013310
014410
015510
016610
017710
018810
019910
021120
023320
024420
025520
026620
027720
......
xuzuning 2015-07-03
  • 打赏
  • 举报
回复
$a = Combination(range(0, 9), 3);
foreach($a as $v) $r[] = join('', array_merge($v, array_reverse($v)));
print_r($r);

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
)
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;
  }
unifyyeteng 2015-07-03
  • 打赏
  • 举报
回复
谢谢!辛苦版主了.会编程真好.要是人工自己一个一个来.估计一天也搞不完.

21,890

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧