【11年特长生第二题】裁缝师

裁 缝 师 裁缝师


题目

老李是某布行资深的裁缝师傅,他经常要将一块布裁剪成若干块小布。他是这样裁剪布料的:一刀下去,不管布有多长,都是沿直线剪开它为止。当然,他还可以一次剪多层布料,至于一次能剪多少层,则依赖于该布料的类型。例如:对于某种布料来说,一次只能剪一层布,那么要把一块2X3的布料剪成6块1X1的小布,总共需要剪5刀,如下图;但是,对于另外一种不同的布料来说,如果这种布料一次可以剪两层布,那么只需要三刀就可以剪开布料了(剪完第一刀后,把剪开的两块布叠在一起,再剪第二、第三刀)。

【11年特长生第二题】裁缝师_第1张图片

显然,在剪的过程中,叠放在一起剪的几块布料是可以不同形状的。比如1X2的布料是可以叠放在2X2的布料上裁剪的。注意,一块布料本身是不能折叠,所以1X3的布料需要剪2刀,而不是1刀(对折再剪)。
老李想知道对于一块NXM的大布料,最少用多少刀就可以把它裁剪成NXM块1X1的小布块。现在老李请你编写一个程序来完成这个任务。

输入

从文件tailor.in中读入数据,文件只有一行,共有三个数L、N、M。第一个数L(1=

输出

答案输出到文件tailor.out中,只有一个数,表示裁剪布料的最少刀数。

输入输出样例1

tailor.in
1 3 2
tailor.out
5

输入输出样例2:

tailor.in
2 3 2
tailor.out
3

解题思路

这题我们可以推算,其实不用考虑它的层数,只需要来计算它的面积要多少刀划分即可.

程序如下

#include
#include
#include
#include

using namespace std;

int l, n, m, t,ans;

int main()
{
	freopen("tailor.in","r",stdin);
	freopen("tailor.out","w",stdout);
	scanf("%d%d%d",&l,&n,&m);
	t = 1;
	while(t < n * m)
	{
		if(t >= l) t += l;
		else t += t;
		ans += 1;
	}
	printf("%d", ans);
	return 0;
} 

你可能感兴趣的:(模拟,ssl)