玫瑰花圃

问题分析

让我们把这个问题想象成一个由小正方形组成的玫瑰花圃,就像一个网格。假设花圃有 ( n * n ) 个小格子(( n ) 是奇数且大于等于5)。我们需要在以下位置种植粉色玫瑰:

  • 最中间的一行:整个一行格子(有 ( n ) 个格子)。
  • 最中间的一列:整个一列格子(有 ( n ) 个格子)。
  • 四个顶点:花圃的四个角落,各一个格子(共 4 个格子)。

但是,中间行和中间列会交叉在一个点(中心点),这个点被重复计算了一次(它既在中间行又在中间列)。所以,我们需要避免重复计数。另外,四个顶点不会和中间行或列重叠,因为 ( n >=5 ),顶点在角落,而中间行和列在中心位置。

因此,粉色玫瑰的总格子数可以这样计算:

  1. 中间行:( n ) 个格子。
  2. 中间列:( n ) 个格子。
  3. 减去重复的中心点:1 个格子(因为它在中间行和列中被算了两次)。
  4. 加上四个顶点:4 个格子。

所以,粉色玫瑰的总格子数 = ( n + n – 1 + 4 = 2n + 3 )。

整个花圃的总格子数是 n * n。

粉色玫瑰占比 = 2n + 3 。

百分比 = (2n + 3) / n*n 。

最后,结果保留一位小数,并显示为百分比形式(如 52.0%)。

为什么这个模型简单?

  • 我们用加法和减法来计数格子,就像数数一样。
  • 中间行、中间列和顶点都是容易找到的位置(想象一个棋盘,中间行和列就是正中间的那一行和一列,顶点就是四个角)。
  • 重复的中心点就像数东西时不小心数了两次,所以要减掉一次。
  • 数学公式很简单:只用到乘法和除法。

编写程序

现在,我们用 C++ 写一个程序来实现这个计算。程序会读取整数 ( n ),计算粉色玫瑰的百分比,并输出结果(保留一位小数,带百分号)。

#include <bits/stdc++.h>
using namespace std;

int main() {
    int n;
    cin >> n; // 读入整数 n
    // 计算粉色玫瑰格子数:2n + 3
    int pink_count = 2 * n + 3;
    // 计算总格子数:n * n
    int total = n * n;
     // 输出百分比,保留一位小数,并添加百分号
    cout << fixed << setprecision(1) << pink_count*100.0 / total << "%" << endl;
    return 0;
}

保存 编译 运行