三角形中的碎片数量

时间:2016-03-17 22:31:26

标签: java algorithm

如何继续计算 N 级别三角形中的碎片数量 enter image description here

片段是包含一个或多个匹配的直线。

3 个答案:

答案 0 :(得分:0)

<?php

include_once "settings.php";

if (!empty($_POST["RestaurantID"])) {
    $RestaurantID = $_POST["RestaurantID"];
    $query = "SELECT * FROM restaurants WHERE RestaurantID = $RestaurantID";
    $results = 
    ($con, $query);

foreach ($results as $restaurants) {
?>

<option value="<?php echo $restaurants['RestaurantID']; ?>"><?php echo $restaurants["RestaurantName"]; ?>"></option>

<?php
}

}
?>

答案 1 :(得分:0)

注意,对于大小为n的匹配行,有(n *(n + 1))/ 2(或n + 1选择2)个片段。 让我们考虑一下水平的行。我们从最小的水平行(大小为1)开始,然后到最大的水平行(大小为n)。这就是我们如何构建循环。现在注意,对于对角线定向的行,其中的片段数量将与水平行中的片段数量相同。

鉴于有三个方向我们可以得到循环的结果并将它乘以3.你的答案。

int sum = 0;
for (int i = 1; i <= n; i++) {
    sum += (i * (i + 1))/2;
}
sum *= 3; 

答案 2 :(得分:0)

enter image description here

请注意,实际上我们可以计算一个方向的片段,然后乘以3,因为它们是对称的(如图中的3种不同颜色所示)

让我们计算一个方向:

每个级别x都有x个匹配,我们可以选择x长度为1的片段,x-1长度为2的片段,x-2长度为3的片段。等等。

因此对于每个级别x,有1 + 2 + 3 + ... + x = x *(x + 1)/ 2个片段

因此,我们可以简单地为一个方向循环所有级别x,然后乘以3.

以下是C ++代码示例:

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

int n, ans = 0;
int main() {
	cin >> n;
	for(int i=1; i<=n ;i++){
		ans += (1+i)*i / 2;
	}
	ans *= 3;
	cout << ans << endl;
	return 0;
}
&#13;
&#13;
&#13;