Chinaunix首页 | 论坛 | 博客
  • 博客访问: 431615
  • 博文数量: 103
  • 博客积分: 1455
  • 博客等级: 上尉
  • 技术积分: 1380
  • 用 户 组: 普通用户
  • 注册时间: 2012-09-15 22:17
文章分类

全部博文(103)

文章存档

2013年(4)

2012年(99)

我的朋友

分类: C/C++

2012-10-15 15:32:31

题目是让写一个控制小车左转右转和前进的程序,输入最大坐标系如5 5
输入起点位置1 2 E 输入行进指令如MLMLMLMRMM等等,输出最后到达的位置和方向

点击(此处)折叠或打开

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>

  4. typedef struct NODE{
  5.     int direct;
  6.     int x;
  7.     int y;
  8. }Node;



  9. int main()
  10. {
  11.     int xmax,ymax,times=3,x,y;
  12.     int cmd_number=0;
  13.     char ch,cmd[30];
  14.     enum direct_type {east,west,south,north};
  15.     printf("please input your net size\n");
  16.     scanf("%d %d",&xmax,&ymax);
  17.     printf("xmax=%d ymax=%d\n",xmax,ymax);
  18.     
  19.     Node node_now;
  20.     
  21.     while(times--)
  22.     {
  23.     printf("please input your start position\n");
  24.     scanf("%d %d %c",&x,&y,&ch);
  25.     printf("x=%d y=%d direct=%c\n",x,y,ch);

  26.     node_now.x=x;
  27.     node_now.y=y;
  28.     switch(ch)
  29.     {
  30.         case 'E':node_now.direct=1;break;
  31.         case 'N':node_now.direct=2;break;
  32.         case 'W':node_now.direct=3;break;
  33.         case 'S':node_now.direct=4;break;
  34.         default:printf("input the fucking right cmd!\n");
  35.     };
  36.     
  37.     printf("input your commend int L M and R!\n");
  38.     scanf("%s",cmd);
  39.     printf("cmd is %s\n",cmd);
  40.     cmd_number=0;
  41.     while(cmd[cmd_number]!='\0')
  42.     {
  43.         switch(cmd[cmd_number])
  44.         {
  45.                 case 'R':if(node_now.direct!=1)
  46.                     node_now.direct--;
  47.                     else
  48.                     node_now.direct=4;
  49.                     break;
  50.                 case 'L':if(node_now.direct!=4)
  51.                     node_now.direct++;
  52.                     else
  53.                     node_now.direct=1;
  54.                     break;
  55.                 case 'M':switch(node_now.direct)
  56.                     {
  57.                     case 1:node_now.x++;break;
  58.                     case 2:node_now.y++;break;
  59.                     case 3:node_now.x--;break;
  60.                     case 4:node_now.y--;break;
  61.                     default:printf("direct error\n");
  62.                     }
  63.                     break;
  64.                 default:printf("input error!");
  65.         };
  66.         cmd_number++;
  67.         
  68.     }
  69.     switch(node_now.direct)
  70.         {
  71.             case 1:ch='E';break;
  72.             case 2:ch='N';break;
  73.             case 3:ch='W';break;
  74.             case 4:ch='S';break;
  75.             default:printf("direct to char error\n");
  76.         };
  77.         printf("x=%d y=%d direct=%c\n",node_now.x,node_now.y,ch);
  78.     }
  79.     return 0;
  80.     
  81. }
这个写完其实我想直接用枚举型也挺好,代表方向的数字转化过程,如果不是转很多次走很多次的话不用转换也没问题
在gcc下编译通过,可移植性,没有边界检测和边界碰撞这样的内容,只是简单的改变方向
阅读(2025) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~