2012-01-24 2 views
2

7x7 그리드의 각 셀에 하나의 숫자를 넣는 프로그램이 있습니다. 무작위로 선택되는 56 개의 숫자가 있으며 반복이 없어야합니다.무작위 화 된 행렬에서 반복 제거하기

최종 결과는 각 셀이 동일한 번호를 포함하는 2 개의 셀없이 1에서 56 사이의 정수를 포함하는 7x7 격자 여야합니다. 이 작업을 수행하는 가장 효율적인 방법은 무엇입니까?

여분의 단어 : 셀을 기준으로 격자 셀을 통과하여 임의의 숫자 1-56을 추가하는 x {for y {}}를 만들려고했습니다. 그런 다음 56 슬롯 어레이를 검사하여 해당 번호가 이미 사용 중인지 확인한 다음 해당 번호를 다시 롤 또는 수신 한 다음 사용중인 번호를 표시하도록 배열에 플래그를 지정합니다. 웬일인지, 나는 그것을 작동시킬 수 없었다. 그리고 그것은 나쁜 해결책처럼 보였다. 나는 그것을 버리고 대신 x {y}에 대한 x {2}를위한 두 번째가 있었고 승인 또는 거절하기 전에 롤 수에 대해 셀별로 전체 표 셀을 검사했습니다. 이것은 또한 잘 작동하지 않았고 다루기가 힘들어 보였으므로 나 역시 그것을 폐기했습니다.

답변

0
  • 그 인덱스 번호를 선택하고 배열
  • 에서 제거 1 사이의 난수와 어레이
  • 의 길이를 생성 56
  • 에 숫자 1을 포함하는 56 개 요소들의 어레이를 만들기
  • 거품, 린스
0

가 필요한 모든 숫자 배열을 만들고 반복하고 셔플.

$fullGrid = range($min, $max); 
shuffle($fullGrid); 

지금 모든 당신은 시각적으로 $fullGrid 배열을 표시하기 만하면됩니다.

More on the php shuffle function.

1
  1. 공평 ​​무작위 어레이를

  2. 채움 7 × 7 행렬을 생성하기 위해 56

  3. 사용 피셔 예이츠에 숫자 1로 채워진 길이 (56)의 배열을 셔플 만들기 (행 또는 열 순서) 배열에서 순차적으로.

1

1:56의 배열을 생성 한 다음 셔플 한 다음 처음 49 개의 요소를 선택할 수 있습니다.

$arr = range(1,56); 
shuffle($arr); 
$vals = array_slice($arr, 0, 49); //49 because grid is 7x7 

// put $vals in grid. 
관련 문제