在文章中,首先,我们要画一个彩色三角形。我们需要取一个未着色的三角形,将三角形分成四个小等边形。面积相同的三角形,一直做到第n步,求出图中等边三角形的个数。
此解决方案有两种方法,它们是 -
我们可以观察到三角形的数量在每一步之后都会增加一些(增加 3*previous_number + 2)。所以我们可以运行一个循环直到 n 并计算三角形的数量。
#include <iostream> using namespace std; int main() { int n = 2; // 我们进行的操作数 int count = 1; // 一开始我们只有一个三角形 for(int i = 0; i < n; i++) { // 循环直到 n count = 3 * count + 2; // 随着三角形计数增加 3*prev + 2 } cout <<count << "\n"; }输出结果
17
上述程序的时间复杂度为O(N),其中 N 是执行的操作数。现在我们可以进一步提高它的时间复杂度,这在我们处理更高的约束时会非常有帮助。
在这种方法中,我们将制定一个公式来计算我们的答案。
#include <bits/stdc++.h> using namespace std; int main() { int n = 2; // 我们进行的操作数 int count; count = 2 * (pow(3, n)) - 1; // 第 n 次移动后的三角形总数 cout << count << "\n"; }输出结果
17
上述代码的时间复杂度为 O(· log(N)),其中 N 是我们执行的移动次数。
在给定的程序中,我们只是简单地编写一个公式来解决给定的过程,并将所需的值放入公式中,然后打印结果。
本文通过应用一些观察和一些数学计算得出 N 次移动后三角形的数量。我们还学习了针对此问题的 C++ 程序以及解决此问题的完整方法(正常和高效)。
我们可以用其他语言编写相同的程序,例如 C、java、python 和其他语言。我们希望这篇文章对您有所帮助。