此题为水题。由于数据范围的局限(N<=500),只需 采用对每个节点计算正三角个数和逆三角个数,最后求和即可。
定义某个子三角中与大正三角形底边平行的那条边所对的定点是A点
找规律可知,以第i行第j列的点(假设最上面的点是(0,0),第二行第一个点是(1,0),第二个点是(1,1),以此类推。)为A点的正三角有(n-i)个,倒三角有min(j,i-j)个(注意不要写成n-j)。
此算法时间复杂度O(n^2),空间复杂度S(1)(空间复杂度似乎是用S?忘了- -)
#include "stdio.h"
int min(int a,int b){
if(a<b)return a;else return b;
}
int main(){
int i,j,k,n,sum;
int temp1,temp2;
while(scanf("%d",&n)!=EOF){
sum=0;
for(i=0;i<=n;i++)
for(j=0;j<=i;j++){
temp1=n-i;
temp2=min(j,i-j);
sum=sum+temp1+temp2;
}
printf("%d\n",sum);
}
return 0;
}