这又是一道坑神的题
题目:
合肥生产的麻饼、烘糕、寸金、白切统称为合肥四大名点,历史悠久,风味独特,是合肥四大传统特产,历来被人们用作待客和馈赠的礼品。
当然摩尔庄园的麻饼不但精致,还比较大,为了减少浪费,麻饼从工厂里生产出来的时候,是一小块扇形的固体,一共有4种规格,编号为1~4,分别是圆心角为72º,144º,216º,288º的扇形,4种规格的半径都一样。麻饼的盒子是圆形的,半径和麻饼的半径一致。也就是说,如果将一块1号麻饼和一块4号麻饼可以恰好装入一个盒子,一块2号麻饼和一块3号麻饼可以恰好装入一个盒子。现在已知的4种规格麻饼的数量,你的任务是写一个程序,帮助可可计算最多可以装满多少个盒子。
这道题开始,我就只考虑了1-4,2-3的情况,然后就交了。错了,我当时就很纳闷,。。。。。。。。。。。。。。
肯定还有其他情况!
一小时后…
我发现了一共有6种组合。
但是怎样确定先后顺序呢?
【一脸懵逼】
后来,思路:
因为大的不好分,就尽量多的去消耗大的,剩下的零零散散的小的就很容易拼,就像什么那个5a,就可用剩下的零零散散的a来拼。
嗲马 代码如下:
#include <bits/stdc++.h>
using namespace std;
int main(){
long a,b,c,d,ans=0,x;
cin>>a>>b>>c>>d;
if(a<d){
x=a;
}
else{
x=d;
}
ans+=x;
a-=x;
d-=x;
if(b<c){
x=b;
}
else{
x=c;
}
ans+=x;
b-=x;
c-=x;
if(a/2<c){
x=a/2;
}
else{
x=c;
}
ans+=x;
a-=x*2;
c-=x;
if(a<b/2){
x=a;
}
else{
x=b/2;
}
ans+=x;
a-=x;
b-=2*x;
if(a/3<b){
x=a/3;
}
else{
x=b;
}
ans+=x;
a-=x*3;
b-=x;
ans+=a/5;
cout<<ans;
}
这用min也可以:
#include <bits/stdc++.h>
using namespace std;
int main(){
long a,b,c,d,ans=0,x;
cin>>a>>b>>c>>d;
x=min(a,d);
ans+=x;
a-=x;
d-=x;
x=min(b,c);
ans+=x;
b-=x;
c-=x;
x=min(c,a/2);
ans+=x;
a-=x*2;
c-=x;
x=min(a,b/2);
ans+=x;
a-=x;
b-=2*x;
x=min(a/3,b);
ans+=x;
a-=x*3;
b-=x;
ans+=a/5;
cout<<ans;
}
goodbye!!!