滴滴面试题

一个点从原点出发,在给定的范围内,向上,向右,向下,向右。求这个点的终点。

 

 

 

 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 }

 

posted @ 2017-08-22 09:39  Cloud2020  阅读(133)  评论(0)    收藏  举报