오로라 프로젝트 15 번.

이 방법 은 주로 행렬 을 구분 하 는데 이 행렬 은 21 * 21 칸 행렬 이 라 고 볼 수 있 습 니 다.
그 다음 에 행렬 을 나 누 어 왼쪽 상단 에서 11 * 11 의 행렬 을 나 누고 왼쪽 상단 의 사각형 에서 출발 합 니 다.
11 행 과 11 열 에 있 는 각 사각형 의 방법 은 대칭 적 이기 때문에 우 리 는 왼쪽 상단 에서 11 행 각 사각형 의 방법 만 구 해 야 한다.
그리고 이 를 a 배열 에 저장 합 니 다!좌표 (0, 0) 에서 좌표 (11, 11) 까지 의 방법 은 구하 지 않 아 도 되 기 때문에 열 개의 숫자 만 있 습 니 다.
그리고 이 종점 들 을 힘 으로 한 행렬 의 출발점 으로 계산 하고 마지막 에 (11, 11) 에서 (21, 21) 까지 의 방법 을 더 하면 됩 니 다!
그러나 이 방법 은 소개 하지 않 으 면 너무 번거롭다!그리고 효율 이 낮 아서 생각 에 불과 합 니 다! 
#include 
__int64 count=0;//       
void diedai(int i,int j,int k,int l)//k,l        
{

 	if(i==k||j==l)
	 {
	 	return ;
	 } 
	
	if(i==k-1&&j==l-1)
	{
		
		count++;
	//	printf("i=%d
",count); return ; } diedai(i+1,j,k,l); diedai(i,j+1,k,l); } int main() { // printf(" :%d",sizeof(long long int)); __int64 center =0; __int64 sum=0; __int64 a[10]={0},b[10]={0}; for(int i=10,j=0;j<10;j++){ count=0; diedai(0,0,i+1,j+1); a[j]=count; // printf("%d
",a[j]); count=0; diedai(0,0,20-i,21-j); b[j]=count; } for(int i=0;i<10;i++) { printf("a=%d b=%d
",a[i],b[i]); printf("a*b=%I64d
",a[i]*b[i]); sum+=a[i]*b[i]*2; } count=0; diedai(0,0,11,11); printf("count*count=%I64d
",count*count); sum+=count*count; printf(" :%I64d",sum); return 0; }

좋은 웹페이지 즐겨찾기