link:http://acm.sdibt.edu.cn:8080/judge/contest/view.action?cid=337#problem/B

题目是中文,不解释~~一开始做的时候有点小混乱,所以要理清思路,可以在纸上写下逻辑关系,上代码,有少量注释,不懂的或是发现有错误的请留言~~

code:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAX 10010

typedef struct
{
    char name[15];
    int flag;
}car;

car c[MAX];
int count;

int find(char a[])
{
    int i;
    for(i=0;i<count;i++)
    {
        if(strcmp(c[i].name,a)==0)
            return i;
    }
    return -1;
}//寻找是否出现过,若出现过,返回数组编号

int main()
{
    int i,t,j; 
    char command[10],data[15];
    scanf("%d",&t);
    getchar();
    for(i=1;i<=t;i++)
    {    

        count=0;
        printf("Case %d:\n",i);
        while(1)
        {
            scanf("%s",command);
            if(strcmp(command,"IN")==0||strcmp(command,"OUT")==0)
            {
                scanf("%s",data);
                if(strcmp(command,"IN")==0)//要进来
                {
                    if(find(data)==-1)//没有进来过
                    {
                        c[count].flag=1;//让它进来,记录
                        strcpy(c[count++].name,data);
                    }
                    else
                    {
                        if(c[find(data)].flag==1)//还在没走
                            printf("Error\n");
                        else
                            c[find(data)].flag=1;//进来过但是已经走了,再让它进来
                    }
                }
                else
                {
                    if(find(data)==-1)//不存在
                    {
                        c[count].flag=0;//让它出去
                        strcpy(c[count++].name,data);//保存记录
                    }
                    else
                    {
                        if(c[find(data)].flag==0)//已经出去
                            printf("Error\n");
                        else
                            c[find(data)].flag=0;//存在但没有出去,让它出去
                    }
                }

            }
            else if(strcmp(command,"LIST")==0)
            {
                for(j=0;j<count;j++)
                    if(c[j].flag==1)
                        printf("%s\n",c[j].name);
            }
            else
                break;
        }
    }
    return 0;
}

发表评论

电子邮件地址不会被公开。

Post Navigation