C语言编程练习题_02兰州烧饼
题目来源于网络,代码使用VS Code编译运行通过。
烧饼有两面,要做好一个兰州烧饼,要两面都弄热。当然,一次只能弄一个的话,效率就太低了。
有这么一个大平底锅,一次可以同时放入k个兰州烧饼,一分钟能做好一面。
而现在有n个兰州烧饼,至少需要多少分钟才能全部做好呢?
例如:
输入:
n = 3 k = 2
输出:
time = 3
代码如下
/*
烧饼有两面,要做好一个兰州烧饼,要两面都弄热。当然,一次只能弄一个的话,效率就太低了。
有这么一个大平底锅,一次可以同时放入k个兰州烧饼,一分钟能做好一面。
而现在有n个兰州烧饼,至少需要多少分钟才能全部做好呢?
例如: 输入:
n = 3 k = 2
输出:
time = 3
*/
/*
思路分析:
如果当前需要烘烤的烧饼数量小于等于能够一次性放入的烧饼数量(n <= k) 则只需要 2 分钟
如果当前需要烘烤的烧饼数量大于能够一次性放入的烧饼数量(n > k),而且 满足 (2 * n) % k == 0 时,需要烘烤时间为(2 * n) / k
如果当前需要烘烤的烧饼数量大于能够一次性放入的烧饼数量(n > k),而且 满足 (2 * n) % k != 0 时,需要烘烤时间为(2 * n) / k + 1
烧饼有两面,每一面都需要被烘烤,n个烧饼需要烘烤 (2 * n) 次,
当(2 * n)次正好整除 k 时,经过排布能够实现每一锅都烘烤 k 个烧饼面,因此总共需要的时间就为 (2 * n) % k
否则,烘烤的时间应该再加一,余数 的烧饼还需要再烘烤一锅,耗费时间多一分钟。
*/
#include <stdio.h>
#define ERR_Input -1
/***************************************************************
FunctionName: int LZSB(const int k,const int n)
Purpose: Calculate the baking time
Parameter:
const int k 锅内一次性可以制作的烧饼的个数
const int n 总共需要制作的烧饼个数
Return: return time (minute)
Remark: NONE
****************************************************************/
int LZSB(const int k,const int n)
{
int time = 0 ;
if(!k || !n)return ERR_Input;
if(n <= k)return 2;
if(!((2 * n) % k))time = (2 * n) / k;
else time = ((2 * n) / k) + 1;
return time;
}
int main()
{
int k = 0 , n = 0;
int time = 0;
printf("\r\nPlease Input k and n!\r\n");
scanf("%d %d",&k,&n);
time = LZSB(k,n);
if(time == ERR_Input)printf("\r\nErr_INput!\r\n");
else printf("The time is %d minute\r\n",time);
}