2013-08-22 1 views
0

는, 그 필요성은 매우 특정한 순서로 반복되는 테이블, 포토 이하 값의 순서를 설명과 크기 4 × 4 직사각형 도시 F(row,col) 나는 이전에 설명한 순서를 사용하여 테이블을 반복하고 회전 나는 두 임의 크기의 사각형 테이블이 반복

감사합니다 그들 내부에 F (행, 전화를) 호출이 개 가장 효율적인 루프,

+0

그리고 어떤 진전을 보였습니까? –

+0

함수 F는 무엇을합니까? 퍼포먼스에 관한 질문입니까, 아니면 로테이션이 제대로 작동하는 데 문제가 있습니까? –

+0

나는 그 루프를 쓰면서 이미 몇 시간을 보냈다. 나는 술에 취하지 않았다. 또는 나를 막는 이유가 무엇인지 모르겠다. – Lu4

답변

1

이해야 D 필요 제 1 및 제 2 광장의 트릭 O를 :

for (int i = 0, n = size + size - 1; i < n; i++) { 
    int j = min(i, size - 1); 
    for (int col = i - j; col <= j; col++) { 
     int row = i - col; 

     /* case 1 */ 
     F(row, col); 

     /* case 2 */ 
     F(size - row - 1, size - col - 1); 
    } 
}   
+0

이것은 작동하지 않으며 F (0,0), F (0, -1), F (0, -2)를 호출합니다. F (1,0) 등 – Marcus

+0

@ 마커스 감사합니다. 나는 내 대답을 편집했다. – Thomas

+0

마커스 감사합니다! – Lu4

1

첫 번째 경우를 들어,이 시도 (당신이 역자 주 경우에, 나는 당신이 제로 기반 인덱스를 사용하고 있으리라 믿고있어 1을 기반으로, 단지 F(row + 1, col + 1) 사용) :

를 두 번째 경우에 대한
int DIM = 3; // dimention of the table - 1, in this case 4 (4 - 1 = 3) 

int col = 0; 
int row = 0; 

for(int x = 0; x < (DIM + 1) * (DIM + 1); x++) { 
    F(row, col); // your function 
    int lastRow = row; 
    row = (col == DIM)? DIM: (row == 0? col + 1: row - 1); 
    col = (col == DIM)? lastRow + 1: (lastRow == 0? 0: col + 1); 
} 

는 그 거의 동일, 차이는 (F(DIM - row + 1, DIM - col + 1)하여 함수에서 매개 변수를 대체 기반의 1을 사용하는 경우, 다른 경우와 같은) 당신이 당신의 함수를 호출하는 방법입니다 :

int col = 0; 
int row = 0; 

for(int x = 0; x < (DIM + 1) * (DIM + 1); x++) { 
    F(DIM - row, DIM - col); // your function 
    int lastRow = row; 
    row = (col == DIM)? DIM: (row == 0? col + 1: row - 1); 
    col = (col == DIM)? lastRow + 1: (lastRow == 0? 0: col + 1); 
} 
+0

morgano, 고맙습니다. 토마스의 대답은 대답을 먼저 선택했기 때문에 답변을 선택해야했지만, 투표가 끝나면 다른 답변도 나옵니다. – Lu4