왜이렇게 쓸데없는 과제를 내어주는지 모르겠다.
#include <iostream>
using namespace std;
void zigzag(int tile_i[][10], int size);
int main() {
int dk, da, db, dx, delta;
int i, j, k, a, b, size;
int tile[10][10]={0,};
cout<<"size: ";
cin>>size;
cout << "-원본 배열" << endl << endl;
i=0; k=0;
a=0; b=0;
da=0; db=1; dx=-1;
delta=1;
while(i<size*size) {
tile[a][b]=i+1;
a+=da; b+=db; i+=1;
da=1-da; db=1-db;
k+=delta;
if(k+1==size) {
delta=-delta;
da=1-da; db=1-db;
}
if(i>=size*size) break;
dx=-dx;
for(j=0;j<k;j+=1) {
tile[a][b]=i+1;
a+=dx; b-=dx;
i+=1;
}
}
for (i=0; i<size; i+=1) {
for(j=0; j<size; j+=1) {
cout << tile[i][j] << "\t";
}
cout << endl;
}
cout << endl;
zigzag(tile, size); // 함수정의
return 0;
}
void zigzag(int tile_in[][10], int size) {
int dk, da, db, dx, delta;
int i, j, k, a, b, c, d;
int zig_temp[10][10]={0,};
i=0; k=0;
a=0; b=0; c=0; d=0;
da=0; db=1; dx=-1;
delta=1;
while(i<size*size) {
zig_temp[c][d]=tile_in[a][b];
a+=da; b+=db; i+=1;
da=1-da; db=1-db;
if(d+1<size) {
d+=1;
} else {
c+=1;
d=0;
}
k+=delta;
if(k+1==size) {
delta=-delta;
da=1-da; db=1-db;
}
if(i>=size*size) break;
dx=-dx;
for(j=0;j<k;j+=1) {
zig_temp[c][d]=tile_in[a][b];
a+=dx; b-=dx;
i+=1;
if(d+1<size) {
d+=1;
} else {
c+=1;
d=0;
}
}
}
// zig_temp[i][j]에 값 저장한 다음, 출력 하는 과정
cout << "- zigzag 스캔 결과"<< endl << endl;
for(i=0; i<size; i++) {
for(j=0; j<size; j++) {
cout << zig_temp[i][j] << "\t";
}
cout << endl;
}
}
'c·c++ > c++ 프로그래밍' 카테고리의 다른 글
longest common substring (0) | 2014.03.31 |
---|---|
파일의 글자수 세기 (0) | 2013.11.09 |
최대공약수 구하기 (0) | 2013.10.05 |
2진수를 10진수로 바꾸기 (0) | 2013.10.05 |
if문 없는 간단한 카드게임 (0) | 2013.09.10 |