본문 바로가기

IT/C언어

발판 만들기 프로그램


임의의 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