【2.4.1 mileage bank】
【问题描述】
acm(airline of charming merlion,迷人的鱼尾狮航空公司)的飞行里程计划对于经常要乘坐飞机的旅客非常不错。一旦乘坐了一次acm航班,你就可以在acm里程银行中根据实际飞行里程赚取acm奖励里程。而且,你可以使用acm里程银行中的acm奖励里程来兑换将来的acm免费机票。
下表帮助你计算当你要乘坐acm航班的时候,可以赚取多少acm奖励里程。
上表表明,你的acm奖励里程由两部分组成。一部分是你的实际飞行里程(一个航班的经济舱的最低acm奖励里程为500英里),另一部分是当你乘坐商务舱和头等舱时的飞行里程奖励(其精度可达1英里)。例如,你乘坐acm航班从北京飞到东京(北京和东京之间的实际里程是1329英里),根据你乘坐的舱类y、b或f分别可以奖励1329 英里、1994英里或2658英里。你乘坐acm航班从上海飞往武汉(上海和武汉之间的实际里程为433英里),你乘坐经济舱可以奖励500英里,乘坐商务舱可以奖励650英里。
请帮助acm编写一个程序,来自动计算acm的奖励里程。
输入:
输入包含若干测试用例,每个测试用例含多条航班记录,每条航班记录占一行,格式如下:
出发城市 目的地城市 实际里程 舱类代码
每个测试用例以包含一个0的一行结束。
以包含一个#的一行表示输入结束。
输出:
对每个测试用例,输出一行,给出acm奖励里程的总和。
试题来源:acm beijing 2002
在线测试地址:poj 1326,zoj 1365,uva 2524
提示
本题是一道简单的直叙式模拟题:依次输入航班信息,根据每次航班的实际里程和舱类代码累计奖励里程的总和。
【2.4.2 cola】
便利店给出以下的优惠:
“每3个空瓶可以换1瓶可口可乐。”
现在,你准备从便利店买一些可口可乐(n瓶),你想知道你最多可以从便利店拿到多少瓶可口可乐。
图2.4-1给出了n=8的情况。方法1是标准的方法:喝完8瓶可口可乐之后,你有8个空瓶;你用6只空瓶去换,得到了2瓶新的可口可乐;喝完后你有4个空瓶,因此用3个空瓶又换了一瓶新的可口可乐。最后,你手上有2只空瓶,不能再去换到新的可乐了。因此,你一共获得8+2+1=11瓶可乐。
但实际上有更好的方法。在方法2中,先从你的朋友(或者店主)那里借一个空瓶,这样就可以获得8+3+1=12瓶可乐。当然,你要还给你的朋友你剩下的空瓶。
输入若干行,每行给出一个整数n (1 ≤ n ≤ 200)。
对于每个测试用例,程序要输出你最多可以喝到多少瓶可口可乐。你可以向别人借空瓶,但如果这样做,要确保你有足够的瓶子还给他们。
试题来源:contest of newbies 2006
在线测试地址:uva 11150
设想买的可口可乐的瓶数为n;借的空瓶数为i;总瓶数为cnt,兑换前cnt=n+i;实际喝到的可口可乐瓶数为tot ,兑换前tot=n;ans为最多可喝到的可口可乐瓶数,初始时为0。
反复模拟如下兑换过程,直至cnt≤3为止:
step 2: 如果a = 1,则算法终止;
step 3: 如果a是偶数,则用a / 2代替a,转向step 2;
step 4: 如果a是奇数,则用3 *a + 1代替a,转向step 2。
ans初始化为0;
while(a<=l&&a!=1){ // 若当前项值不超过上限且非1,则项数+1
ans++;
根据a的奇偶性计算下一项,即a=a&1?3*a+1:a/2;
}
if(a==1)ans++;// 若最后一项为1,则增加1项