ホームページ >バックエンド開発 >PHPチュートリアル >緊急の番号再編成計算の問題です。

緊急の番号再編成計算の問題です。

WBOY
WBOYオリジナル
2016-06-23 14:10:08858ブラウズ

問題の説明:
計算する必要のある一連の数値があり、再編成後の合計数値ができるだけ早く計算されます。
数値は必ずしも指定されたものであるとは限りません。他の数値である場合もあります。
数値:
例 1
1-> 0123
2->01234
3->678
合計: 60


例 2
1->0123456789
2->0123456789
3->0123 4
合計:500


メソッドを書く 再編後の合計数と再編後の数を計算する


ディスカッションに返信(解決策)

何を言っているのか分かりません
例を挙げた方が良いです

理解できません~~~~

例:

1->0
2->01
3->01

再編成された番号は 000,001,010,011 で、合計は 4

何これはどういう意味ですか?

$ar = array('0123','01234','678',);print_r(foo($ar));function foo(&$ar, $i=0) {  $res = array();  if($i+1 <count($ar)) {     $t = foo($ar, $i+1);     foreach(str_split($ar[$i]) as $v) {       foreach($t as $r) $res[] = $v . $r;     }  }else $res = str_split($ar[$i]);  return $res;}
Array
(
[0] => 006
[1] => 007
[2] => 008
[3] => 016
[4] => 017
[5] => 018
[6] => 027
[9] => 037
[11] => [12] => 046
[14] => 106
[17] => ] => 116
[19] => 118
[21] => 127
[24] = > 136
[26] => 146
[29] => 148
[30] 206
[31] => 208
[34] => 21 8
[36] =>
[37] => 227
[39] => 237
[42] => 246 43
[44] => 306
[47] => 308
[49] =>317
[51]=>327
[54]=>336
[55] ; 337
[56] => 338
[58] => 347
[59] => 348
ではない場合これは単なる順列と組み合わせですか?
1->0123
2->01234
3->678
合計 = A(4,1)*A(5,1)*A(3,1) = 4*5*3 = 60

如果不考虑重复问题,这个不就是排列组合了?
1->0123
2->01234
3->678
总数 = A(4,1)*A(5,1)*A(3,1) = 4*5*3 = 60
代码?

echo strlen('0123')*strlen('01234')*strlen('678');//??这个算最快不?

<?php$array = array('111','111','11111');//echo strlen($arrar[0]); function zuhe($array){        foreach ($array as $value) {        if (strlen($value)) {            $sum[] = strlen($value);        }    }    $i = 0;    print_r($sum);    $total =1;    while ($sum[$i]) {        $total = $total * $sum[$i];        $i++;    }    echo $total; }zuhe($array);?>


噢!只要计算组合数啊?!我还以为要求所有的组合呢

$ar = array('0123456789', '0123456789', '01234');echo array_product(array_map('strlen', $ar));

其实你们的方法都是对的..只是我没有想到最快的...一时脑浆糊了..谢谢了 ...

看来我还是要多看PHP手册,又被xu版大人秒杀了。

发现数组中一个奇怪的问题,不知道是不是我写的有问题.

$strArr = array(    1 => 0, 3 => 1, 6 => 2, 10 => 3, 15 => 4, 21 => 5, 28 => 6, 36 => 7, 45 => 8,    55 => 9, 63 => 10, 69 => 11, 73 => 12, 75 => 13, 75 => 14, 73 => 15, 69 => 16,    63 => 17, 55 => 18, 45 => 19, 36 => 20, 28 => 21, 21 => 22, 15 => 23, 10 => 24, 6 => 25,    3 => 26, 1 => 27);echo $str = '1,2,3,6,7,25,23,15,18'."\n";$sArr = explode(',',$str);foreach($sArr as $v){    echo array_search($v,$strArr)."\n";}


结果:
1,2,3,6,7,25,23,15,186157355Array(    [1] => 27    [3] => 26    [6] => 25    [10] => 24    [15] => 23    [21] => 22    [28] => 21    [36] => 20    [45] => 19    [55] => 18    [63] => 17    [69] => 16    [73] => 15    [75] => 14)


我的0-13的这个怎么都没有了???

不明白这个 0-13 是什么意思

你的 $strArr 数组键名重复了,因此后面的覆盖前面的。print_r($strArr); 就知道了。

$strArr = array(
   1 => 0,
   3 => 1,
   6 => 2,
  10 => 3,
  15 => 4,
  21 => 5,
  28 => 6,
  36 => 7,
  45 => 8,
  55 => 9,
  63 => 10,
  69 => 11,
  73 => 12,
  75 => 13,
   75 => 14,
   73 => 15,
   69 => 16,
   63 => 17,
   55 => 18,
   45 => 19,
   36 => 20,
   28 => 21,
   21 => 22,
   15 => 23,
   10 => 24,
    6 => 25,
    3 => 26,
    1 => 27
);
套红的下标将覆盖上面已有的下标

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。