(c语言)切蛋糕问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(c语言)切蛋糕问题相关的知识,希望对你有一定的参考价值。

(c语言)切蛋糕问题:
一个矩形蛋糕,长宽都是正整数,要求用户输入蛋糕的长和宽,
并且由用户决定切分成多少块。
编写一个函数:
1.求怎样切割使得最大的那一块面积最小。
2.并输出最大的那一块的面积。
注意:
原来的蛋糕是矩形的,新切好的全部蛋糕也是矩形的。
切割的轨迹需要平行于原蛋糕的边,保证每块新蛋糕的边长均为整数。

补充: 最大的一块最小,也就是切出来的几块尽量一样大,这样其中最大的那一块便是最小了啊。
距离2×3切3块
当然是2 2 2切了,最大的便是2
如果是1 2 3切。最大的便成了3了啊

参考技术A 分数呢?0分没人管的呀。。。追问

你如果回答的上了给您追加分

追答

不是为了分数。随便一说 。。。给你点提示行吗?
我怀疑题目有问题,还是你自己没理解题意,还是自己造的题目?长宽都是正整数切出一样大小的蛋糕,你就切出 长(假设是3)的个数不就行。。。。???

追问

不是,这是斯坦福的一道c语言的题目。它的意思是要尽可能均分

切蛋糕

问题描述

一块边长是2L的正方形蛋糕落在坐标轴内,中心在原点上,现在你竖直切了m次,水平切了n次,中间还挖出了一个长度是2P的正方形的洞,洞的中心也在原点上。求最终蛋糕分成了几块。

技术分享图片

输入格式

输入cake.in共四行。

第一行一个数L,第二行一个数P

第三行n个数,表示水平切的位置

第四行m个数,表示竖直切的位置

输出格式

一个数,表示最终那个蛋糕的个数

样例输入

5

3

1 -4

1

样例输出

6

数据范围

30% 的数据 L,P≤10,1≤n,m≤2

100%的数据 1≤L,P,1≤n,m≤100

题解

假设中间没有挖掉一个正方形的洞,那么,最终会有(n+1)*(m+1)个蛋糕。

而事实上中间挖掉一个正方形的洞,这对答案会有什么影响呢?

如图,

技术分享图片

 

有几个小蛋糕完全被正方形的洞覆盖了,这些蛋糕不能算入答案的总个数。

假设水平切有px次经过挖掉的洞,竖直切有py次经过挖掉的洞,显然,完全被正方形覆盖的校蛋糕有(px-1)*(py-1)个;

最终答案就是(n+1)*(m+1)减去完全被洞覆盖的蛋糕数。

 

 

 1 #include <string>
 2 #include <cstdio>
 3 int L,P,ans,x[105],y[105],xt,yt,px,py;
 4 bool visx[200],visy[200],vis;
 5 int main()
 6 {
 7     int res,i,j,f;
 8     char ch;
 9     bool fg,mak;
10     scanf("%d%d
",&L,&P);
11     for (ch=getchar();ch!=
;ch=getchar())
12     {
13         res=0;  f=1;
14         while ((ch<0 || ch>9) && ch!=- && ch!=
) ch=getchar();
15         if (ch==
) break;
16         if (ch==-) f=-1,ch=getchar();
17         while (ch>=0 && ch<=9)
18           res=res*10+ch-0,ch=getchar();
19         res*=f;
20         if (!visx[res+100]) visx[res+100]=1,x[++xt]=res;
21         if (ch==
) break;
22     }
23     for (ch=getchar();ch!=
;ch=getchar())
24     {
25         res=0;  f=1;
26         while ((ch<0 || ch>9) && ch!=- && ch!=
) ch=getchar();
27         if (ch==
) break;
28         if (ch==-) f=-1,ch=getchar();
29         while (ch>=0 && ch<=9)
30           res=res*10+ch-0,ch=getchar();        
31         res*=f;
32         if (!visy[res+100]) visy[res+100]=1,y[++yt]=res;
33         if (ch==
) break;
34     } 
35     for (i=1;i<=xt;i++) 
36       if (-P<=x[i] && x[i]<=P)
37         px++;
38     for (i=1;i<=yt;i++)
39       if (-P<=y[i] && y[i]<=P)
40         py++;
41     if (px<1) px=1;
42     if (py<1) py=1;
43     printf("%d",(xt+1)*(yt+1)-(px-1)*(py-1));
44     return 0;
45 }

 

以上是关于(c语言)切蛋糕问题的主要内容,如果未能解决你的问题,请参考以下文章

Wannafly挑战赛13-D

分数的全面解析式与在C语言中应用分数计算

切蛋糕

TZOJ 3042 切蛋糕(并查集)

C语言中啥叫模块啊求详解

C语言中怎样调用批处理文件?