오로라 프로젝트 15 번.
1432 단어 알고리즘&데이터 구조
그 다음 에 행렬 을 나 누 어 왼쪽 상단 에서 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;
}