初始思路:
是定义了两个数组,一个储存进去车辆的信息,另一个储存的是出去的车辆的信息,这样导致每次进去都需要查找车辆以前是否出去过,若出去过需要清楚出去信息,若车辆需 要 出去,又要查找该车辆是否进去过,若进去过要清楚进去的信息,以至于最终也不知道哪里出错了。
后来思路:
借鉴了别人的代码,恍然大悟,只需要用一个数组来标记汽车是否出去或进来,令flag=1是进入,flag=0是出去
#include<stdio.h> #include<map> #include<string.h> using namespace std; struct Node { int flag;//1是进入了的,0出去的 char nam[20]; }car[10000]; int cas1; int Find(char name[]) { int i; for (i=0;i<cas1;i++) { if(!strcmp(car[i].nam,name)) { return i; } } return i; } int main() { int T; int cas=1,t,i; char str[10],str2[20]; scanf("%d",&T); while(T--) { cas1=0; printf("Case %d:\n",cas++); while(1) { scanf("%s",str); if(!strcmp(str,"EXIT")) break; if(!strcmp(str,"IN")) { scanf("%s",str2); t=Find(str2); if(t==cas1)//以前没有出现的车要进来 { strcpy(car[cas1].nam,str2); car[cas1].flag=1; cas1++; } else//以前进来过的 { if(car[t].flag==1) { printf("Error\n"); } else//出去了的->进去 { car[t].flag=1; } } } else if(!strcmp(str,"OUT")) { scanf("%s",str2); t=Find(str2); if(t==cas1) { strcpy(car[cas1].nam,str2); car[cas1].flag=0; cas1++; } else { if(car[t].flag==0) { printf("Error\n"); } else { car[t].flag=0; } } } else { for (i=0;i<cas1;i++) { if(car[i].flag) printf("%s\n",car[i].nam); } } } } return 0; }