간단한 규칙을 찾아낼 수 있는 능력이 필요하다.
생각보다 꽤 오래 걸렸다.
등비, 등차 공식을 다시 한번 유도해 보는 연습을 해보자.
------------------------------------------
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
FILE* fp=fopen("input.txt", "rt");
FILE* fo=fopen("output.txt", "wt");
int i,j,k;
int length, num, count, even;
int temp, temp2, temp3;
if(fp==NULL)
{
printf("파일이 없어요\n");
return 1;
}
fscanf(fp, "%d", &length);
fscanf(fp, "%d", &num);
if(length%2 == 0)
even = 1;
else
even = 0;
if(num ==1)
{
count = 1;
temp = count;
for(j=0;j<length/2;j++)
{
for(i=0;i<temp;i++)
{
fprintf(fo, "%d ", count);
count++;
}
fprintf(fo, "\n");
count+=temp;
temp++;
for(i=0;i<temp;i++)
{
fprintf(fo, "%d ", count);
count--;
}
fprintf(fo, "\n");
temp++;
count+=temp;
}
if(even == 0) // 홀수
{
for(i=0;i<temp;i++)
{
fprintf(fo, "%d ", count);
count++;
}
}
}
else if(num == 2)
{
count = 0;
temp = 1+ (length-1)*2; // 가로로 적을 횟수 정하는 것이요
temp2 = 0; // 1번이 빈칸이고 ++한다..
for(i=0;i<length;i++)
{
for(j=0;j<temp2;j++)
fprintf(fo," ");
for(j=0;j< (temp-(temp2*2));j++)
fprintf(fo,"%d ", count);
fprintf(fo,"\n");
temp2++;
count++;
}
}
else if(num == 3)
{
temp = (length/2)+1; //가로 개수
temp2 = length/2; //공백 개수
temp3 = -1;//공백조정하기
for(i=0;i<length;i++)
{
count = 1;
for(j=0;j<temp-temp2;j++)
{
fprintf(fo,"%d ", count);
count++;
}
fprintf(fo,"\n");
if(temp2 == 0)
temp3*=-1;
temp2 += temp3;
}
}
fclose(fp);
return 0;
}