初始思路:
是定义了两个数组,一个储存进去车辆的信息,另一个储存的是出去的车辆的信息,这样导致每次进去都需要查找车辆以前是否出去过,若出去过需要清楚出去信息,若车辆需 要 出去,又要查找该车辆是否进去过,若进去过要清楚进去的信息,以至于最终也不知道哪里出错了。
后来思路:
借鉴了别人的代码,恍然大悟,只需要用一个数组来标记汽车是否出去或进来,令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;
}