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
广告
数据结构
网络
关系数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP