c·c++/c++ 프로그래밍

zigzag

바로이순간 2013. 10. 22. 06:48

왜이렇게 쓸데없는 과제를 내어주는지 모르겠다.


#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