试题描述
Michael请N个朋友吃馅饼,但是每个朋友吃且仅吃一个馅饼的1/4、1/2或3/4。请你编程求出Michael至少需要买多少个馅饼。
输入要求
输入数据的第一行是整数N,1 ≤ N ≤ 10000;接下来的N行中,每行都是1/4、1/2或3/4。
输出要求
输出数据仅有一行包含一个整数--至少需要购买的馅饼数目。
输入样例
6
3/4
1/2
3/4
1/2
1/4
1/2
输出样例
4
知识点及提示
如果Michael有4个朋友都要吃3/4的馅饼,则Michael要买4个馅饼,买3个馅饼是不行的,因为第4个朋友他不愿意吃3个1/4馅饼。
读入数据时既可以用一个字符串变量读入一行如readln(s); s为字符串(string)类型的变量;也可以读3个字符如readln(c1,c2,c3); c1,c2,c3为字符(char)类型的变量。 不能用实数类型的变量读入数据,因为1/2,1/4,3/4都是表达式,不是实数常量。
样例中的4个馅饼是这样安排的,第1个朋友和第5个朋友合吃1个馅饼,第3个朋友单独吃1个馅饼,第2个朋友和第4个朋友合吃一个馅饼,第6个朋友单独吃1个馅饼,共计需要4个馅饼。
一道pascal贪心问题 pizza
答案:2 悬赏:60 手机版
解决时间 2021-02-02 00:31
- 提问者网友:浮克旳回音
- 2021-02-01 09:17
最佳答案
- 五星知识达人网友:骨子里都是戏
- 2021-02-01 10:16
//样例过了,应该是对的吧
var
n,i,s:longint;
v:array[1..3]of longint;
st:string;
begin
readln(n);
for i:=1 to n do begin
readln(st);
if st='1/4' then inc(v[1]);
if st='1/2' then inc(v[2]);
if st='3/4' then inc(v[3]);
end;
if v[1]>v[3]then begin
inc(s,v[3]);
dec(v[1],v[3]);
v[3]:=0;
end
else begin
inc(s,v[1]);
dec(v[3],v[1]);
v[1]:=0;
end;
inc(s,v[1]shr 2+v[2]shr 1);
v[1]:=v[1]mod 4;
v[2]:=v[2]mod 2;
inc(s,v[1]+v[2]+v[3]);
writeln(s);
end.
var
n,i,s:longint;
v:array[1..3]of longint;
st:string;
begin
readln(n);
for i:=1 to n do begin
readln(st);
if st='1/4' then inc(v[1]);
if st='1/2' then inc(v[2]);
if st='3/4' then inc(v[3]);
end;
if v[1]>v[3]then begin
inc(s,v[3]);
dec(v[1],v[3]);
v[3]:=0;
end
else begin
inc(s,v[1]);
dec(v[3],v[1]);
v[1]:=0;
end;
inc(s,v[1]shr 2+v[2]shr 1);
v[1]:=v[1]mod 4;
v[2]:=v[2]mod 2;
inc(s,v[1]+v[2]+v[3]);
writeln(s);
end.
全部回答
- 1楼网友:归鹤鸣
- 2021-02-01 11:29
《编程之美》里面有一道买书问题的贪心算法。
题目是这样的:
在节假日的时候,书店一般都会做促销活动。由于《哈利波特》系列相当畅销,店长决定通过促销活动来回馈读者。上柜的《哈利波特》平装本系列中,一共有五卷。假设每一卷单独销售均需8欧元 。如果读者一次购买不同的两卷,就可以扣除5%的费用,三卷则更多。假设具体折扣的情况如下:
本数 折扣
2 5%
3 10%
4 20%
5 25%
在一份订单中,根据购买的卷数及本数,就会出现可以应用不同折扣规则的情况。但是,一本书只会应用一个折扣规则。比如,读者一共买了两本卷一,一本卷二。那么,可以享受到5%的折扣。另外一本卷一则不能享受折扣。如果有多种折扣,希望计算出的总额尽可能的低。
要求根据以上需求,设计出算法,能够计算出读者所购买一批书的最低价格。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯