一道c++题目

来源:百度知道 编辑:UC知道 时间:2024/09/26 00:34:40
古希腊三角几何。比如,如果一定数目的卵石可以排列成对称的三角几何图形,则该数字被称为“三角形的”。前十个三角形的数字为0,1,3,6,10,15,21,28,36,45。编写一个布尔函数用来判断一个数字是否为“三角形的”。

测试程序:
#include <iostream>
using namespace std;

int isTriangular(int n)
{
//...请补充函数体
}

int main()
{ const int MAX=25;
for (int i=0; i<MAX; i++)
if (isTriangular(i)) cout << i << " 是三角形.\n";
else cout << i << " 不是三角形.\n";
}

程序运行结果为:
0 是三角形.
1 是三角形.
2 不是三角形.
3 是三角形.
4 不是三角形.
5 不是三角形.
6 是三角形.
7 不是三角形.
8 不是三角形.
9 不是三角形.
10 是三角形.
11 不是三角形.
12 不是三角形.
13 不是三角形.
14 不是三角形.
15 是三角形.
16 不是三角形.
17 不是三角形.
18 不是三角形.
19 不是三角形.
20 不是三角形.
21 是三角形.
22 不是三角形.
23 不是三角形.
24 不是三角形.

所谓的三角形数,实际上有如下规律:
F(n) = C(n+1,2)
这里 C (m,n) 表示 m 中任选 n 个的组合数
也就是说
F(n) = n(n+1)/2, n = 0, 1, 2,... 一种简单的判断方式:

for ( i = 0; i < n/2; ++ i )
{
if ( i*(i+1) == 2*n ) break;
}
return i < n/2;

当然还有更高效率的:
i = int(sqrt(2.0*n));
return i*(i+1) == 2*n;
(需要 #include <math.h> 并且连接 math 库 -l math)