2015-07-31 34 views
5

, bunlar aşağıdaki şekilde int bir iki boyutlu bir dizi doldurmak için bana sor: Ben algoritmalar için bu ödev yapmaya çalışıyorum

4 3 2 3 4 
3 2 1 2 3 
2 1 0 1 2 
3 2 1 2 3 
4 3 2 3 4 

ben java bu çalıştı:

int[][] array = new int[5][5]; 
for (int i = 0; i < array.length; i++) { 
    for (int j = 0; j < array[i].length; j++) { 
     array[i][j] = Math.abs(i - j); 
    } 
} 

ama bana böyle bir şey verir:

0 1 2 3 4 
1 0 1 2 3 
2 1 0 1 3 
3 2 1 0 1 
4 3 2 1 0 

Ve gerçekten aynı şey değil, ama bu yakın olduğunu Buldum. Kodu java'da yazdım ama başka bir dilde olabilir ... önemli olan bence "formül". Eğer bu problemi çözmeme yardım edebilirseniz, iyi olacak, kodu internette aramaya çalıştım ama bir şey bulamadım ... teşekkür ederim.

+3

İlk önce, bir bilgisayar programı ile hesaplayabilmeniz için önce el ile hesaplayabilmeniz gerekir. Her bir hücredeki sayı, Manhattan'ın merkeze uzaklığıdır. Manhattan mesafesini nasıl hesaplayacağınıza bakın, sonra örnek olarak aynı sonuçları aldığınızdan emin olmak için elle hesaplayın, daha sonra sadece hesaplamayı kodlara dönüştürün. – hyde

cevap

6

Merkeze olan mesafeyi arıyor gibi görünüyor. Yani önce bu noktayı hesaplamak zorunda: Sonra

int center = array.length/2; //assuming a quadratic array 

, mesafenin hesaplanması oldukça kolaydır:

//for ... 
array[i][j] = Math.abs(i - center) + Math.abs(j - center); 
-1

Bu aynı zamanda çalışacaktır.

int p=N-1; 
for(i=0,l=N-1;i<=l;i++,l--) 
{ 
    for(j=0,k=N-1;j<=k;j++,k--) 
    { 
     arr[i][j]=p; 
     arr[i][k]=p; 
     arr[l][j]=p; 
     arr[l][k]=p; 
     p--; 
    } 
    p=N-i-2; 
} 
İlgili konular