滴滴面试题
一个点从原点出发,在给定的范围内,向上,向右,向下,向右。求这个点的终点。
1 #include<stdio.h> 2 3 typedef struct point { 4 int x; 5 int y; 6 } point_t; 7 8 typedef enum { 9 RIGHT = 1, 10 UP = 2, 11 LEFT = 3, 12 DOWN = 4, 13 } direction_t; 14 15 point_t solution(point_t p_in) { 16 point_t p_out = {0, 0}; 17 direction_t dir = RIGHT; 18 int bound_left = 0; 19 int bound_right = p_in.x; 20 int bound_up = p_in.y; 21 int bound_down = 1; 22 int loop = 1; 23 24 while(loop){ 25 switch (dir){ 26 case RIGHT: 27 if (p_out.x>=bound_right){ 28 return p_out; 29 } 30 p_out.x=bound_right; 31 bound_right--; 32 dir=UP; 33 case UP: 34 if (p_out.y>=bound_up){ 35 return p_out; 36 } 37 p_out.y=bound_up; 38 bound_up--; 39 dir=LEFT; 40 case LEFT: 41 if (p_out.x<=bound_left){ 42 return p_out; 43 } 44 p_out.x=bound_left; 45 bound_left++; 46 dir=DOWN; 47 case DOWN: 48 if (p_out.y<=bound_down){ 49 return p_out; 50 } 51 p_out.y=bound_down; 52 bound_down++; 53 dir=RIGHT; 54 } 55 56 } 57 58 59 return p_out; 60 } 61 62 int main(void) { 63 point_t p_in, p_out; 64 scanf("%d %d", &p_in.x, &p_in.y); 65 p_out = solution(p_in); 66 printf("%d %d\n", p_out.x, p_out.y); 67 return 0; 68 }
「Talk is cheap. Show me the code」