#include <iostream>
using namespace std;
void asdf(int cnt, int cna)
{
int arr[100][100];
int num=1;
int i,j;
for(i=0; i<(cnt/2)+1; i++)
{
for(j=i;j<cnt-1;j++)
{
arr[i][j] = num++;
}
for(j=i+1;j<cnt-i;j++)
{
arr[j][cnt-i-1] = num++;
}
for(j=cnt-i-2;j>=i;j--)
{
arr[cnt-i-1][j] = num++;
}
for(j=cnt-i-2;j>=i+1;j--)
{
arr[j][i] = num++;
}
}
for(i=0;i<cnt;i++)
{
for(j=0;j<cnt;j++)
{
cout << arr[i][j] << " " ;
}
cout << endl;
}
cout << endl;
}
int main()
{int n;
int a;
while(1)
{
cin >> n ;
asdf(n);
break;
}
return 0;
}
이건 그냥 n*n이고
n*m, 그러니까 row하고 col하고 다르게 나올때 출력하려면 어떻게 고쳐야할까요
뭐 3*5 이런거는 어떻게하죠? 검색해도 그런건 안나옴..
내가 알면 도와줄텐대 아직 부족해서 도움을 못드리네여
3*5면 그냥 for문 두 개에 밖은 for(i=0; i<3;i++) 안은 for(j=0;j<5;j++) 이런식으로 하면 되지 않나여
걍 행렬 출력이나 값 넣는거 말씀하시는거 맞져?
초보라 달팽이가 뭔지 모르겠당;
달팽이 어케함?
아하 달팽이가 이런거구나
배열에 끝에 도달하면 방향을 바꾸는 함수를 만들면 될텐데
여러분 이 새벽에 사람하나 살린다 생각하시고 좀 도와줍쇼 ㅠ
안해봐서모름 하하하
for문을 좀 쓰면 가능 할 것 같은데 처음 j++ [zeroi][j]로 시작해서 [zeroi][m]에 도달하면 i++ [i][m]으로 돌리고 [n][m]도달하면 j-- [n][j]해서 [n][zeroj]도달, 그 다음은 zeroi++해둔다음 i-- [i][zeroj]해서 [zeroi][zeroj]도달하면 zeroj++후 [zeroi][zeroj]도달하면 m-- 후에 ..글로 표현하기가 더 좆같구나
제 공부하기도 바뻐서 더는 못돕겠음 하하 공부하러감
가로, 세로 길이 따로 저장해놓고 네가지 루프문을 다시 보세욧
키포인트는 i,j의 min값과 max값을 반복문 돌리면서 min값은 점점 ++ max값은 점점 -- 해서 정중앙 도착하면 탈출
저도 안배운거고 달팽이행렬 검색해서 원리만 보고 쓴거라 개같은 소리일 수도 있으니 전문가한테 문의하셈;
위에 쓴 글에선 zeroi, zeroj가 min값이고 n,m이 max값
위에 설명해준대로 하면 됨 ㅋㅋ 초기 min, max값 잘 정해주고, 종료 시점 잘 챙겨주면 끝. 변수하나 더 선언해서 값 넣어줄때마다 넣어준거 카운트해서 w*h 만큼 되면 루프 종료시키는것도 편한 방법이 됨