임의의 5x5 점수판에 대해서 ( 0, 0)에서부터 시작해서 점수판을 상하좌우로 나아가자.
이때 현재 밟고 있는 점수와 가장 차이가 적은 발판으로 진행한다고 할 때,
받는 점수와 총 점을 구해보자.
단, 발판을 몇 번 밟을 건지는 입력받도록 하고,
최초 시작은 (0, 0)부터 시작하며 이 발판에 해당하는 점수도 총점에 포함된다.
점수는 1부터 100까지.
예를 들어 7번 움직인다고 가정했을 때,
소스 코드
#include <stdio.h> //표준입출력
#include <stdlib.h> //rand()함수사용가능 (0~32367사이)
#include <time.h> //시간함수지만 난수 생성 시 사용
#include <math.h>
int main()
{
int arr[5][5]; //배열 가로세로 5개씩.
int i, j, step;
int x, y, c_x, c_y, temp_value, gap;
int score = 0;
srand((unsigned int)time(NULL));
/*매번 seed를 변경해주는 난수 생성
time 함수는 시간을 넣어주면 경과 시간을 돌려주지만, 여기에 NULL을 넣어주면
(포인터임) 1970년 1월 1일 0시 0분 0초로부터의 경과시간을 돌려준다.
따라서 항상 다른 값이 나오게 될 것이고 seed도 매번 변경된다.
srand는 unsigned int 를 입력으로 받는 함수이다.
time함수가 널값을 받아서 나온 값이 time_t 형태인데 srand는 언사인드인트를 입력으로 받고, 그래서
언사인드인트로 형변환이 된거고 그게 에스랜드가 쓰일 때 쓰는 걸루 바뀐거야!
*/
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
arr[i][j] = (int)rand()%100+1;
/* rand()%100 은 0~99까지 나온다. 왜냐하면 100으로 나눈 것의
나머지이기 때문에. 여기에 +1을 해주면, 1~100이 된다.
*/
printf("%2d\t", arr[i][j]);
}
printf("\n");
}
printf("발판을 몇 번 밟으시겠습니까? \n");
scanf("%d", &step); // 발판을 밟을 횟수 입력받기.
if(step<0)
{
printf("왜 음수 입력했어? \n");
return 0;
}
printf("%d +",arr[0][0]);
x = 0;
y = 0;
for(;step>0;step--) //발판의 횟수만큼 반복.
{
gap = 100; //갭은 차이 값을 넣는 변수. 어차피 여기 숫자들이 다 100이니깐 Temp가 뭐가 나오든 gap보단 작으니까.
if(x - 1 >= 0 && y >= 0) //상일 때.
{
temp_value = abs(arr[x][y] - arr[x-1][y]); //abs는 절댓값 함수.
if(temp_value < gap )
{
gap = temp_value;
c_x = x-1;
c_y = y;
}
}
if(x + 1 < 5 && y >= 0) //하일 때
{
temp_value = abs(arr[x][y] - arr[x+1][y]);
if(temp_value < gap )
{
gap = temp_value;
c_x = x+1;
c_y = y;
}
}
if(x >= 0 && y - 1 >= 0) //좌
{
temp_value = abs(arr[x][y] - arr[x][y-1]);
if(temp_value < gap )
{
gap = temp_value;
c_x = x;
c_y = y-1;
}
}
if(x >= 0 && y + 1 < 5) //우
{
temp_value = abs(arr[x][y] - arr[x][y+1]);
if(temp_value < gap )
{
gap = temp_value;
c_x = x;
c_y = y+1;
}
}
printf(" %d +", arr[c_x][c_y]);
x=c_x;
y=c_y;
score += arr[x][y] ;
}
score = score + arr[0][0] ;
printf("\b = %d\n", score);
return 0;
}
음수 입력 했을 때.
양수 입력 했을 때.
세미나 하면서 만든 소스인데,
솔직히 잘 못만든 것 인정하지만
코딩하면서 넘 정들어서 올려버림 ... 히히
#googleads'IT > C언어' 카테고리의 다른 글
[C언어] 포인터 변수의 선언 (3) | 2017.08.11 |
---|---|
[C언어] 포인터 이해하기 (3) | 2017.08.10 |
[C언어] 1차원 배열의 주소와 값의 참조 (4) | 2017.08.07 |
[C언어] 배열 선언 시 주의할 점 (0) | 2017.08.07 |
[C언어] 배열에 데이터 저장하기 (0) | 2017.08.04 |