컴퓨터공부/알고리즘

대각선 순으로 배열 값 입력

achivenKakao 2007. 9. 30. 15:56

코드들이 맘에 들지 않는다..

+

#include<stdio.h>

int map[9][9];

FILE *in = fopen("input.txt", "r");
FILE *out = fopen("output.txt", "w");

void print(int num)
{
 int i, j;
 
 for(i =0 ; i < num; i++)
 {  
  for(j =0 ; j < num; j++)
   fprintf(out,"%d ", map[i][j]);

  fprintf(out, "\n");
 }
}

void assign( int num)
{
 int i, j;
 int increase;  // 오른쪽으로 갈때마다 증가되는 값
 int divide;   // 오른쪽 대각선으로 가르는 것 확인
 int plus_num;
 
 for(i =0 ; i < num; i++)
 {
  divide = num - i - 1;  
 
  increase = i + 2;
  plus_num = map[i][0];
  for(j =1; j <= divide; j++)
  {
   plus_num += increase++;
   map[i][j] = plus_num;
  }
 }

 for(i =0 ; i < num; i++)
 {
  divide = num - i - 1;
  increase = num;
 
  plus_num = map[i][divide];
  for(j = divide+1; j < num; j++)
  {
   plus_num += increase--;
   map[i][j] = plus_num;
  }
 }
}

int most_left(int num)
{
 int increase;
 int i;
 int assign_num;

 assign_num = num;
 
 increase = 0; // 왼쪽 대각선의 증가값
 
 for(i=0; i < num; i++, increase++)
 {
  assign_num += increase;
  map[i][0] = assign_num;
 }
 
 return 0;
}

void main()
{
 int input;
 int i, j, num;
 
 fscanf(in,"%d", &input);
 
 if(input > 9 && input < 1)
  return ;
 
 num = input;
 
 // 제일 왼쪽 초기화
 most_left(num);
 
 // 제일 왼쪽의 수를 기준으로 나머지 값을 대입
 assign(num);
 
 print(num);
}