问题描述
有一块n×n(n≥5,且 n 是奇数)的红玫瑰花圃,由 n×n 个小正方形花圃组成,现要求在花圃中最中间的一行、最中间的一列以及 4 个顶点处种植粉色玫瑰,请问粉玫瑰占地面积占整个玫瑰花圃总面积的百分比是多少?
如 n=5,花圃形状如下,粉玫瑰占地百分比 =13/25=52.0%
如 n=7,花圃形状为如下,粉玫瑰占地百分比 =17/49=34.7%
输入
一个整数 n ( 5≤n≤99,且 n是奇数)
输出
粉玫瑰占总玫瑰园的百分比,结果保留 1 位小数,显示为百分比的形式。
样例
输入
5
输出
52.0%
代码1
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
int totalArea = n * n;
int pinkArea = 5 * (n - 2) + 1;
double pinkPercentage = static_cast<double>(pinkArea) / totalArea * 100;
cout << fixed << setprecision(1) << pinkPercentage << "%" << endl;
return 0;
}
该代码首先读入输入的整数 n,表示花圃的大小。
然后,我们计算花圃的总面积 totalArea = n * n
。
接下来,我们计算粉玫瑰占地的面积。根据题目描述,粉玫瑰的占地面积包括最中间的一行、最中间的一列以及 4 个顶点处的正方形花圃。我们可以观察到,除去这些区域之外的部分的面积是 (n - 2) * (n - 2)
,所以粉玫瑰占地的面积是 pinkArea = 5 * (n - 2) + 1
。
最后,我们计算粉玫瑰占总玫瑰园的百分比,并输出结果。这里我们使用了 static_cast<double>(pinkArea)
将 pinkArea
转换为浮点数,然后除以 totalArea
得到百分比,并乘以 100。我们使用 fixed
和 setprecision(1)
来保留一位小数,并以百分比形式输出。
这种方法通过计算粉玫瑰占地面积和总面积的比例来得到百分比,以保留一位小数的形式输出结果。
代码2
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
int n;
cin >> n;
int totalArea = n * n;
int pinkArea = 1 + 4 + 4 * (n - 2);
double pinkPercentage = static_cast<double>(pinkArea) / totalArea * 100;
cout << fixed << setprecision(1) << pinkPercentage << "%" << endl;
return 0;
}
该代码首先读入输入的整数 n,表示花圃的大小。
然后,我们计算花圃的总面积 totalArea = n * n
。
接下来,我们计算粉玫瑰占地的面积。根据题目描述,粉玫瑰的占地面积包括最中间的一行、最中间的一列以及 4 个顶点处的正方形花圃。我们可以观察到,最中间的一行和最中间的一列的长度都是 1,所以它们占地的面积是 1 * n + n * 1 = 2n。另外,4 个顶点处的正方形花圃的边长都是 1,所以它们占地的面积是 4 * 1 = 4。除去这些区域之外的部分的面积是 (n - 2) * (n - 2)
。
因此,粉玫瑰占地的面积是 pinkArea = 2n + 4 + 4 * (n - 2)
。
最后,我们计算粉玫瑰占总玫瑰园的百分比,并输出结果。这里我们使用了 static_cast<double>(pinkArea)
将 pinkArea
转换为浮点数,然后除以 totalArea
得到百分比,并乘以 100。我们使用 fixed
和 setprecision(1)
来保留一位小数,并以百分比形式输出。
这种方法通过计算粉玫瑰占地面积和总面积的比例来得到百分比,以保留一位小数的形式输出结果。