POJ 1250 Tanning Salon(简单模拟)

19 篇文章 0 订阅

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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值