10177 - (2/3/4)-D Sqr/Rects/Cubes/Boxes?

盯著正方形的圖想了許久才靈光一閃

假設有個n*n的正方形
我們先用最小1*1正方形慢慢數,不難發覺,有n*n個

接下來2*2就得動點腦筋了。
我們從最左上角開始往右邊數
會發現當數到n-1次時,會數不下去
同理3*3當數到n-2次時,也一樣。

發現小正方形m*m在n*n正方形內所佔有的數量為(n-(m-1))*(n-(m-1))

而若要算小長方形的數量,用同樣的思考方式去想一樣容易許多
三維、四維也用同樣的思路即可

#include<stdio.h>
#include<math.h>

int main() {
	int n;
	while(scanf("%d", &n) == 1) {
		int i;
		long long int r[3];
		r[0] = n * (n+1) * (2*n+1) / 6.0 + 0.5;
		r[1] = pow(n * (n+1) / 2.0, 2) + 0.5;
		r[2] =(6*pow(n, 5) + 15*pow(n, 4) + 10*pow(n, 3) - n) / 30.0 + 0.5;
		for(i = 0; i < 3; i++) {
			printf("%lld ", r[i]);
			printf("%lld", (long long int)(pow(n * (n+1) / 2.0, i+2) - r[i] + 0.5));
			if(i != 2) putchar(' ');
		}
		putchar('\n');
	}
	return 0;
}

可以發現上方的代碼中有r[0]、r[1]、r[2]
這三個變數分別儲存 ∑(n, k=1)k^2、∑(n, k=1)k^3、∑(n, k=1)k^4 (為了提高精度所以r[2]才這麼算的)

∑(n, k=1)k * ∑(n, k=1)k -∑(n, k=1)k^2長方形的個數,若不懂這式子的涵義,可以試著去推導看看!
當然三維、四維也一樣用同個式子擴展。


很少寫過文章,總感敘述不清楚啊...(我不會說因為我懶的寫推導過程才叫讀者們自己想的)
若有任何疑問儘管提出來吧,只要在我能力範圍內的問題都會盡量回答的!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值