ホームページ  >  記事  >  バックエンド開発  >  ボウル A. それぞれのボウルには B のボールが入ります。ボールは全部で何通りありますか (ボールはまったく同じです)。

ボウル A. それぞれのボウルには B のボールが入ります。ボールは全部で何通りありますか (ボールはまったく同じです)。

WBOY
WBOYオリジナル
2016-07-25 08:48:221274ブラウズ
ボウルも同じ、ボールも同じ、考え方を変えてください。
A 列と B 行の表では、各鋼球を 1 つのグリッドに配置でき、合計 C 個の鋼球になります。
鋼球を動かしてさまざまな可能性を生み出します。重複や漏れを避けるため、以下のルールに従って鋼球を移動させます。
最初の列がいっぱいになったら、鋼球を左から右に配置します。
鋼球を移動するときは、必ず左側の列の鋼球の数が右側の列の鋼球の数より少なくならないようにしてください。
鋼球を動かすたびに起こり得る状況が発生し、カウンターが1ずつ増加します
  1. $boxNum = 20;
  2. $size = 10;
  3. $total = 33;
  4. //初期化
  5. $data = array();
  6. for($i=1;$i<=$boxNum;$ i++)
  7. {
  8. if($total>=$size)
  9. {
  10. $data[$i] = $size;
  11. $total -= $size;
  12. }
  13. else if($total>0)
  14. {
  15. $ data[$i] = $total;
  16. $total = 0;
  17. }
  18. else
  19. {
  20. $data[$i] = 0;
  21. }
  22. }
  23. for($i=1;$i<=$boxNum ;$i++) echo $data[$i]."t";
  24. echo "rn";
  25. $count = 1;
  26. while(true)
  27. {
  28. for($i=$boxNum;$i> =1;$i--)
  29. {
  30. //最後の値を検索
  31. if($data[$i]>0)
  32. {
  33. $last = $i;
  34. Break;
  35. }
  36. }
  37. list( $prev,$next) = getPrevNext($data,$last);
  38. if($prev===false)
  39. {
  40. if($last<$boxNum)
  41. {
  42. if($data[1]>1 )
  43. {
  44. list($prev,$next) = getPrevNext($data,$last+1);// 新しい列を有効にする
  45. }
  46. else
  47. {
  48. Break;//End
  49. }
  50. }
  51. else
  52. {
  53. Break;//End
  54. }
  55. }
  56. $num = Floor(($data[$prev] - $data[$next])/2);
  57. $data[$prev] -= $num;
  58. $data [$next] += $num;
  59. $count += $num;
  60. for($i=1;$i echo "num:".$num."rn";
  61. }
  62. echo '.$count.' の可能性があります'."rn";
  63. function getPrevNext($data,$last)
  64. {
  65. $ prev = $next = false;
  66. for($i=$last-1;$i>=1;$i--)
  67. {
  68. if($data[$i]-$data[$i+1]> ;1)//一次ローリングが見つかりました
  69. {
  70. $prev = $i;
  71. $next = $i+1;
  72. Break;
  73. }
  74. else if($data[$i]-$data[$last] >1)//複数次ローリングが見つかりました
  75. {
  76. $prev = $i;
  77. for($k=$i+1;$k {
  78. if($data[ $ i]-$data[$k]>1)//最短のマルチステップ ロールオフを見つけます
  79. {
  80. $next = $k;
  81. Break;
  82. }
  83. }
  84. Break;
  85. }
  86. }
  87. return array($ prev,$next);
  88. }
コードをコピー


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