C语言中直角等腰三角形内最多能容纳多少个2×2的正方形


给定一个直角等腰三角形。等腰三角形是指两条边长度相等的三角形。直角三角形是指高(图中的ag)和底(图中的dg)相互垂直的三角形。目标是找到可以放入这个边长为2个平方单位的直角等腰三角形中的最大正方形数量。底边或高(两者相等)作为输入。正方形的数量作为输出。

参考下图了解问题

给定的高为ag,底为gd的三角形有3个边长为2的正方形。从角端'a'和'd'开始,三角形aib和cde永远不会贡献任何正方形。所以首先我们总是需要额外2个单位长度的三角形。现在我们必须将剩余的底gd(或高ag)除以2来计算正方形的数量。高度(ag)也是如此。

while(base > 2 )
   squares+=(base-2)/2
   base = base-2.
Use formula of Ap = b*(b+1)/2….where new b=b-2

让我们通过例子来理解。

输入 - 底边:12

输出 - 正方形数量:15

说明 

base 12>2, squares 10/2=5, new base 12-2=10
base 10>2, squares 8/2=4, new base 10-2=8
base 8>2, squares 6/2=3, new base 8-2=6
base 6>2, squares 4/2=2, new base 6-2=4
base 4>2, squares 2/2=1, new base 4-2=2
base 2>2 X Total squares=5+4+3+2+1=15

输入 - 0.5

输出 - 正方形数量 - 1

说明 

base 5>2, squares 3/2=1, new base 5-2=3
base 3>2, squares 1/2=0, new base 3-2=1
base 1>2 X Total squares=1

下面程序中使用的算法如下

  • 整型变量base用于存储三角形的底边。

  • 函数numofSquares(int b)用于计算底边为b的三角形可以容纳的正方形数量。

  • 首先b=b-2 - 角端处的额外空间

  • 根据公式,b=floor(b/2),这个新的b可以有b*(b+1)/2个边长为2的正方形。

  • 将计算结果作为正方形的数量返回。

示例

 在线演示

#include <stdio.h>
#include <math.h>
int numofSquares(int b){
   // removing the extra part we would
   // always need
   b = (b - 2);
   // Since each square has base of
   // length of 2
   b = floor(b / 2);
   return b * (b + 1)/2;
}
int main(){
   int base = 8;
   printf("Maximum no. of square that can be accommodated : %d",numofSquares(base));
   return 0;
}

输出

如果我们运行以上代码,它将生成以下输出:

Maximum no. of square that can be accommodated : 6

更新于:2020年8月17日

620 次查看

开启你的职业生涯

通过完成课程获得认证

开始学习
广告

© . All rights reserved.