|
수열(?)을 만든다.
잘 보면 공통점을 찾을 수 있습니다.
편의 상 시작값을 a, 종료값을 b로 하겠습니다.
(경우)
a=1, b=5일 경우
1 2 3 4 5
5 1 2 3 4
4 5 1 2 3
3 4 5 1 2
2 3 4 5 1
이렇게 5x5 로 출력합니다.
즉 출력할 열과 행의 개수는 각각 (b-a+1)개 입니다.
반복문을 2번 사용해서 만들면 되겠네요.
예)--------------------------
for(i=0; i<5; i++)
{
for(j=0; j< 5; j++)
{
printf("%d ", j);
}
printf("\n");
}
결과)
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
---------------------------
일정한 규칙을 만들어 봅시다.
a 와 b가 어떤 값이든 처음 시작을 모두 0부터 시작하게 변환해주면 쉬워집니다.
즉, a를 0로 만든다는 것이지요.
예)-----------------------
a=0, b=4일때
0 1 2 3 4
4 0 1 2 3
3 4 0 1 2
2 3 4 0 1
1 2 3 4 0
a =1, b=5일때는
0 1 2 3 4
4 0 1 2 3
3 4 0 1 2 에 모두 +1
2 3 4 0 1
1 2 3 4 0
a=3, b=7일때는
0 1 2 3 4
4 0 1 2 3
3 4 0 1 2 에 모두 +3
2 3 4 0 1
1 2 3 4 0
자세히 보시면 모두 a=0일때 값에 a값을 더해주면 나옵니다.
---------------------------------------------------------
그럼 식은 (a=0일 경우로 만든 값) + a 가 되겠군요..................(식1)
---------------------------------------------------------
자 그럼...
이제부터 0부터 시작하게 만들겠습니다.
0 1 2 3 4 ..........(1)
4 0 1 2 3 ..........(2)
3 4 0 1 2 ..........(3)
2 3 4 0 1 ..........(4)
1 2 3 4 0 ..........(5)
모든 수를 5로 나머지 셈을 하면 0~4까지 나옵니다.
나머지셈은 그 숫자를 넘을 수 없지요.
5의 나머지셈으로
0은 0,5,10,15....
1은 1,6,11,16...
2는 2,7,12,17...
이렇게 됩니다.
(1)를 다시 표현하면...
5 6 7 8 9 을 모두 %5하면 되겠네요.
(2)는 4 5 6 7 8을 %5
(3)은 3 4 5 6 7을 %5
(4)는 2 3 4 5 6을 %5
(5)는 1 2 3 4 5를 %5
전체로 묶어 보지요.
5 6 7 8 9
4 5 6 7 8
3 4 5 6 7 에 %5를 하면 나옵니다.
2 3 4 5 6
1 2 3 4 5
자 또 다시 볼까요.
5는 b-a+1입니다.
----------------------------------------------------------
그러면 식은 (어떤 값)%(b-a+1)+a 로 만들어집니다.................(식2)
----------------------------------------------------------
5 6 7 8 9 는 0 1 2 3 4 에 모두 5를 더한것
4 5 6 7 8 은 0 1 2 3 4 에 모두 4를 더한것
3 4 5 6 7 은 0 1 2 3 4 에 모두 3을 더한것
2 3 4 5 6 은 0 1 2 3 4 에 모두 2를 더한것
1 2 3 4 5 는 0 1 2 3 4 에 모두 1을 더한것입니다.
일정한 규칙을 찾을 수 있습니다.
0 1 2 3 4 에 5부터 1까지 차려로 더하면 나옵니다.
(0 1 2 3 4 값) + 증가값 이렇게 하면 되겠군요.
증가값을 i , (0 1 2 3 4 값)을 j 라고 하면
j + i
다시 식을 만들면
-------------------------------------------------------
( j + i ) % (b-a+1) + a .........................(식3)
-------------------------------------------------------
이제 거의 다 만들었습니다.
i 와 j 만 만들면 되겠군요.
먼저 i 는
시작값 5 , 종료값 1 입니다...
다시 말하면....
시작값 b-a+1, 종료값 1이 되지요.
for(i=b-a+1; i>=1; i--)
이런 반복문이 들어가겠네요.
다음으로 j 를 만들어 보지요.
시작값 0, 종료값 4....
a,b를 이용해서 다시 만들면..
시작값 0, 종료값 b-a 가 됩니다.
반복문은
for(j=0; j<=b-a, j++)
자 이제 (식3)하고 합치겠습니다.
for(i=b-a+1; i>=1; i--)
{
for(j=0; j<=b-a, j++)
{
printf("%d ", ( j + i ) % (b-a+1) + a );
}
printf("\n");
}
드뎌 완성 되었습니다.
C는 간단하지요...^^*
반복문과 연산자 몇개로 끝났네요.
초보님들 잘 보세요...
C가 어려운게 아니고...
공식을 만드는게 어려운 것입니다.
어떻게 하면 나올까....생각해 보세요.
수학( 특히 수열부분)을 좀 공부하면 쉽게 풀리는 문제입니다...
젤 중요한 건....
프로그램 언어가 아닙니다...
다른 것이지요....................................
열씨미 하세요.........
|