2016-08-29 4 views
0

私はオンライン求人アプリケーションからこのテストを受けましたが、私は2次元配列での経験はありません。街区における街区における2次元配列の幅の長さと座標

  1. あなたの街の長さを表す正の整数の範囲1-9
  2. あなたの街の幅を表す正の整数の範囲1-9
  3. 全てを含む配列Xロッカー位置、各X座標範囲1-9
  4. Yは、ロッカーの位置を表す座標全てを含む配列を表す座標、各Yは、範囲を1-9

座標の2次元グリッドを構築 都市。グリッドの各要素は、最も近いロッカーへのブロック数を指定する正の整数でなければなりません。 2つのブロック間の距離は、それらの水平距離と垂直距離の合計です(したがって、対角線方向の移動は2の距離とみなされます)。グリッドを整数の2次元配列として返します。ここで、最初のインデックスはX次元に対応し、2番目のインデックスはY方向に対応します。

Example #1 

Input 
1. 3 
2. 5 
3. [1] 
4. [1] 

Output 
012 
123 
234 
345 
456 

Example #2 

Input 
1. 5 
2. 7 
3. [2, 4] 
4. [3, 7] 

Output 
32345 
21234 
1
21234 
32323 
43212 
1 


static int[][] getLockerDistanceGrid(int cityLength, int cityWidth, int[] lockerXCoordinates, int[] lockerYCoordinates) { 

} 
+2

を、私たちはあなたのためのテストを実施しなければならないとは思わないが、私はあなたにヒントを与えるでしょう:動的なプログラミングを使用すると、最適なソリューションが得られます。 –

+0

@DatNguyenテストが完了しました。私はちょうど答えを知りたい – jayvee

+2

プログラマーがいるだけ多くの答えがあります。あなたの答えはあなたが提出したものです:) – SJFJ

答えて

1

はこのお試しください:

static int[,] getLockerDistanceGrid(int cityLength, int cityWidth, int[] lockerXCoordinates, int[] lockerYCoordinates){ 
int[,] array = new int[cityWidth,cityLength]; 
for(int i = 0; i < cityLength; i++) 
{ 
    for(int j = 0; j < cityWidth; j++) 
    { 
     int value = Math.Abs(i - (lockerXCoordinates[0]-1)) + 
      Math.Abs(j - (lockerYCoordinates[0]-1)); 
     for(int k = 1; k < lockerXCoordinates.Count(); k++) 
     { 
      int current = Math.Abs(i - (lockerXCoordinates[k]-1)) + Math.Abs(j - (lockerYCoordinates[k]-1)); 
      value = Math.Min(value,current); 
     } 
     array[j,i] = value; 
    } 
} 
return array; 
}