差三角
标题:计算差三角
仔细观察下面的数字组成的三角形:
3
1 4
5 6 2
看出什么特征吗?
首先,它包含了1~6的连续整数。
重要的是:每个数字都是其下方相邻的两个数字的差(当然是大数减去小数)
满足这样特征的三角形,称为:差三角。
你的任务是找出1~15的整数组成的一个更大的差三角。其形如:
?
4 ?
? ? ?
* ? ? ?
? ? ? ? ?
其中,只给出了一个确定的数字:4
请确定出“*” 代表的是哪个一个数字。
直接提交该数字,不要提交多余的内容。
//暴力求解 #include<stdio.h> #include<math.h> #include<string.h> int a[5][6]; int v[16]; int fun() { int i,j; for(i=0;i<5;i++) for(j=0;j<=i;j++) if(!v[a[i][j]]) v[a[i][j]]=1; else return 0; if(a[1][0]==4) { for(i=0;i<5;i++) { for(j=0;j<=i;j++) printf("%d ",a[i][j]); printf("\n"); } return a[3][0]; } return 0; } void t() { a[3][0]=abs(a[4][0]-a[4][1]); a[3][1]=abs(a[4][1]-a[4][2]); a[3][2]=abs(a[4][2]-a[4][3]); a[3][3]=abs(a[4][3]-a[4][4]); a[2][0]=abs(a[3][0]-a[3][1]); a[2][1]=abs(a[3][1]-a[3][2]); a[2][2]=abs(a[3][2]-a[3][3]); a[1][0]=abs(a[2][0]-a[2][1]); a[1][1]=abs(a[2][1]-a[2][2]); a[0][0]=abs(a[1][0]-a[1][1]); } int main() { int i,j,u,f,k,g; for(i=1;i<=15;i++) { for(j=1;j<=15;j++) { for(k=1;k<=15;k++) { for(u=1;u<=15;u++) { for(f=1;f<=15;f++) { a[4][0]=i; a[4][1]=j; a[4][2]=k; a[4][3]=u; a[4][4]=f; t(); memset(v,0,sizeof(v)); if(g=fun()) printf("%d\n",g); } } } } } return 0;
5 4 9 7 11 2 8 1 12 10 6 14 15 3 13 8
}