思路:找规律,推公式
4等分:
头朝上的三角形:
边长为1:1+2+3+4=s1;
边长为2:1+2+3=s2;
边长为3:1+2=s3;
边长为4:1=s4;
即si=1+2+...+n-i+1=(n-i+2)*(n-i+1)/2
同理:头朝下的三角形:
n=1:s=0;(1层)
n=2:s=0+1;(2层)
n=3:s=0+(1+2);(3层)
n=4:s=0+1+(1+2+3);(4层)
n=5:s=0+(1+2)+(1+2+3+4);
n=6:s=0+1+(1+2+3)+(1+2+3+4+5);
即f(n)=f(n-2)+(1+2+...+n-1)=f(n-2)+n*(n-1)/2
#include <bits/stdc++.h> using namespace std; int n; int f(int n) { if (n == 1) return 0; if (n == 2) return 1; return f(n - 2) + n * (n - 1) / 2; } int main() { cin >> n; for (int i = 0; i < n; i++) { int x; cin >> x; int sum0 = 0, sum1 = 0; // 记录头朝上和头朝下的三角形数 for (int j = 1; j <= x; j++) { sum0 += (x - j + 1) * (x - j + 2) / 2; // 头朝上 } sum1 = f(x); // 头朝下 cout << sum0 + sum1 << endl; } return 0; }