프로그램 명: wrap(open)
10 * 10 행렬이 주어지고 연속한 인접한 수의 5 개의 합의 최대값을 출력한다. 상,하,좌,우,대각선이 인접하면 인접하다고 하고, 이 행렬의 상하,좌우, 대각선은 붙어 있다.
아래는 입출력 예에서의 답이다.
입력
100 개의 수가 한 줄에 10 개씩 주어진다. 각 수는 -100 에서 100 사이 수이다.출력
최대 값을 출력한다.입출력 예
입력
1 7 0 8 1 0 0 0 6 9
7 1 1 7 5 1 7 8 0 4
3 7 1 2 0 5 1 9 4 8
6 7 5 5 9 0 3 8 9 7
2 1 2 1 4 5 4 0 5 7
4 8 6 4 1 9 9 8 3 5
1 3 1 1 9 2 3 6 9 5
5 1 6 4 9 4 4 4 2 2
4 7 4 9 6 3 1 9 4 3
3 4 1 6 5 2 9 2 1 7
출력
37
---------------------------------------------------------------------------
#include <stdio.h>
int main()
{
int i,j,max=0,l,hap=0,k;
int A[100][100];
for(i=0;i<=9;i++) //입력부분
{
for(j=0;j<=9;j++)
{
scanf("%d",&A[i][j]);
}
}
for(i=0;i<=9;i++) //가로부분
{
for(l=0;l<=5;l++)
{
for(j=l;j<=l+4;j++)
{
hap+=A[i][j];
}
if(max<hap)
{
max=hap;
}
hap=0;
}
}
for(j=0;j<=9;j++) //세로부분
{
for(l=0;l<=5;l++)
{
for(i=l;i<=l+4;i++)
{
hap+=A[i][j];
}
if(max<hap)
{
max=hap;
}
hap=0;
}
}
for(i=0;i<=9;i++) //대각선
{
for(j=0;j<=9;j++)
{
for(l=0;l<5;l++)
{
hap+=A[(i+l)%10][(j+l)%10];
}
if(hap>max)
{
max=hap;
}
hap=0;
}
}
for(j=0;j<=9;j++) //대각선
{
for(i=0;i<=9;i++)
{
for(l=0;l<5;l++)
{
hap+=A[(j+l)%10][(i+l)%10];
}
if(hap>max)
{
max=hap;
}
hap=0;
}
}
printf("%d",max);
return 0;
}