求大三角形中三角形个数

一道笔试编程题要求求一个大三角形中所有小三角形的个数,大约是下面这种情况:


首先想到是的将问题由求边长为n的三角形个数->求边长为n-1的三角形个数->...求边长为1的三角形个数=1,回溯求得所有三角形个数。但是再仔细一看因为有重叠三角形和倒置的三角形,所以这个方法不可行。

接着找到三角形个数由三部分组成:

1,边长为1的小三角形个数=n*n

2,边长为2到n的小三角形个数=(1+2+...+n-1)+(1+2+...n-2)+...+1

3,当边长大于3时,倒置的小三角形个数=i从n-3开始每次减2直到小于等于0,,所有sum(1...i),即sum(i=n-3,sum(1...i),i-=2)


public static int countTheTriangle(int n){
	if(n==0) return 0;
    	int sum=1;
    	if(n>=2){
    		sum+=n*n;
    		for(int i=n-1;i>1;i--){
    			sum+=(1+i)*i/2;
    		}
    		if(n>=4){
    			for(int i=n-3;i>0;i-=2){
    				sum+=(1+i)*i/2;
    			}
    		}
    	}
    	return sum;
    }

应该还有数学方法直接求出来的,但是没有找到

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值