现在的位置: 首页 > 综合 > 正文

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

2018年04月15日 ⁄ 综合 ⁄ 共 790字 ⁄ 字号 评论关闭

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

假設有個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長方形的個數,若不懂這式子的涵義,可以試著去推導看看!
當然三維、四維也一樣用同個式子擴展。


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

抱歉!评论已关闭.