Description
除了写题,zqs还喜欢烤面包。
烤面包需要正反两面各烤一次,每个烤箱同时只能烤一个面包的一面,烤一面需要3分钟,现在他要烤N个面包,有M个烤箱,问烤完所有的面包需要多少时间
Input
有多组输入数据,第一行为一个数字case,代表有多少组输入数据 (case<=20)
以下每组数据一行有2个整数n,m,代表需要烤n个面包,有m个烤箱 (0<=N<=1000,1<=M<=1000)
Output
一共case行,每行一个整数对应该组数据拷完所有面包需要多少时间
Sample Input
2
2 1
3 3
Sample Output
12
6
解题思路:
如果你认为每次一个面包烤完一面后接着烤第二面的话,那么你就想错了。举个例子:5个面包,2个烤箱
(1)1号面包一面,2号面包一面
(2)1号面包第二面,2号面包第二面
(3)3号面包一面,4号面包一面
(4)3号面包第二面,4号面包第二面
(5)5号面包一面
(6)5号面包第二面
结果需要3×6=18分钟。
其实正确的结果应该如下:
(1)1号面包一面,2号面包一面
(2)3号面包一面,4号面包一面
(3)5号面包一面,1号面包第二面
(4)5号面包第二面,2号面第二面
(5)3号面包第二面,4号面包第二面
结果需要3×5=15分钟
所以要分情况讨论:
- 如果n<=m,结果就是6分钟
- 如果n>m,结果就是3×(2n/m+[2n%m]),其中的[2n%m]表示,2n关于m的模如果为0则为0,不为0则为1
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
int caseN;
while(cin>>caseN)
{
for(int i=0;i<caseN;++i)
{
int n,m;
cin>>n>>m;
if(n==0)
{
cout<<0<<endl;
continue;
}
if(n<=m)
{
cout<<6<<endl;
continue;
}
int minute = 3;
int t = 2*n/m;
if(2*n%m!=0)
++t;
cout<<t*minute<<endl;
}
}
return 0;
}
最后欢迎大家访问我的个人网站: 1024s