POJ 1250 Tanning Salon(简单模拟)

来源:互联网 发布:智能电网技术知乎 编辑:程序博客网 时间:2024/05/18 03:28

Description
一个旅馆有n个位,给出所有旅客到达旅馆和离开旅馆的顺序,问有多少旅客是没有住旅馆就离开的
Input
多组用例,每组用例首先输入旅馆的床位数n(n<=20),然后是旅客到达旅馆的顺序,每个大写字母代表一位旅客,以n=0结束输入
Output
对于每组用例,输出没有住旅馆就离开的旅客人数,若是所有旅客均住旅馆则输出All customers tanned successfully.
Sample Input
2 ABBAJJKZKZ
3 GACCBDDBAGEE
3 GACCBGDDBAEE
1 ABCBCA
0
Sample Output
All customers tanned successfully.
1 customer(s) walked away.
All customers tanned successfully.
2 customer(s) walked away.
Solution
简单模拟题
因为旅客用大写字母代替,所以人数很少,故可以用一个整型数组c[30]储每位旅客到达旅馆情况,0表示未来过,1表示入住,2表示到达旅馆但无床位。同样的,因旅馆床位也很少,故可以用一个字符数组z[30]存储床位使用情况,例如:z[i]=’A’表示旅客A入住i房,这样就可以根据每位旅客到达旅馆情况更新旅馆床位使用请况,那么未能入住的乘客人数即可轻易得知
Code

#include<stdio.h>#include<string.h>int main(){    int n,zz,i,j,k,r,len,c[30]={0};//c[30]存储每位旅客到达旅馆情况,0表示未来过,1表示入住,2表示到达旅馆但无床位     char s[100],z[30];//s[100]表示旅客到达旅馆次序,z[30]表示旅馆床位使用情况     scanf("%d",&n);    while(n!=0)    {        r=zz=0;        gets(s);        len=strlen(s);        for(i=0;i<len;i++)        {            if(c[s[i]-'A']==0)//该乘客第一次来             {                c[s[i]-'A']=1;//更新到达旅馆情况                 if(zz<n)//有床位则该乘客入住                     z[zz++]=s[i];                 else//无床位则                 {                    c[s[i]-'A']=2;//更新到达旅馆情况                     r++;//未入住旅客人数                 }            }            else if(c[s[i]-'A']==1)//来过并入住的旅客离开                 {                    zz--;//入住人数减一                     c[s[i]-'A']=0;//更新到达旅馆情况                 }                 else if(c[s[i]-'A']==2)//来过一次未入住的旅客离开                      c[s[i]-'A']=0;//更新到达旅馆情况         }        if(r==0)//所有旅客均入住             printf("All customers tanned successfully.\n");        else//存在未入住旅客             printf("%d customer(s) walked away.\n",r);         scanf("%d",&n);    }}
0 0
原创粉丝点击