读书人

差三角有关问题

发布时间: 2013-04-20 19:43:01 作者: rapoo

差三角问题
在网上看到这样一个题,想了很久,始终没有思路。题目是这样的
仔细观察下面的数字组成的三角形:

3
1 4
5 6 2

看出什么特征吗?
首先,它包含了1~6的连续整数。
重要的是:每个数字都是其下方相邻的两个数字的差(当然是大数减去小数)
满足这样特征的三角形,称为:差三角。

你的任务是找出1~15的整数组成的一个更大的差三角。其形如:

?
4 ?
? ? ?
* ? ? ?
? ? ? ? ?
其中,只给出了一个确定的数字:4
请编程确定出“*” 代表的是哪个一个数字。

我的想法是穷举,但明显行不通。各位大神怎么看? 编程 算法 穷举
[解决办法]
#include <iostream>
using namespace std;
int main()
{int r,h,r1,h1;
int j,k,l,m,n;
int b[6];
int c(int i,int j,int b[]);

for(j=1;j<16;j++)
if(j!=4)
for(k=1;k<16;k++)
if(j!=k&&k!=4)
for(l=1;l<16;l++)
if(l!=j&&l!=k&&l!=4)
for(m=1;m<16;m++)
if(m!=j&&m!=k&&m!=l&&m!=4)
for(n=1;n<16;n++)
if(n!=m&&n!=l&&n!=k&&n!=j&&n!=4)

{int a[16]={0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1};
b[1]=j;

b[2]=k;

b[3]=l;

b[4]=m;

b[5]=n;
if(c(4,4,b)==4)
{
for(r=1;r<=5;r++)
{
for(h=1;h<=11;h++)
{if(r%2==1)
{if(h%2==0
[解决办法]
r>h
[解决办法]
h>9-r+1)
continue;
else if(a[c(r,h,b)]==1)
a[c(r,h,b)]=0;
else continue;
}
if (r%2==0)
{if(r>h
[解决办法]
h%2==1
[解决办法]
h>9-r+1)
continue;
else if(a[c(r,h,b)]==1)
a[c(r,h,b)]=0;
else continue;
}

}
}
if(a[1]==0&&a[2]==0&&a[3]==0&&a[4]==0&&a[5]==0&&a[6]==0&&a[7]==0&&a[8]==0&&
a[9]==0&&a[10]==0&&a[11]==0&&a[12]==0&&a[13]==0&&a[14]==0&&a[15]==0)
for( r1=1;r1<=5;r1++)
{for(h1=1;h1<=11;h1++)
{
if(r1%2==1)
{if(h1%2==0
[解决办法]
r1>h1
[解决办法]
h1>9-r1+1)
cout<<" ";
else
cout<<c(r1,h1,b);
}
if (r1%2==0)
{if(r1>h1
[解决办法]
h1%2==1
[解决办法]
h1>9-r1+1)
cout<<" ";
else
cout<<c(r1,h1,b);
}


}
cout<<endl;

}

}

}

return 0;
}




int c(int i,int j,int b[])
{
int z;
if(i==1)
{if(j==1)


return b[j];
if(j==3)
return b[j-1];
if(j==5)
return b[j-2];
if(j==7)
return b[j-3];
if(j==9)
return b[j-4];
}
else
z=abs(c(i-1,j-1,b)-c(i-1,j+1,b));

return z;
}
//本人菜鸟一枚,输出的结果是倒的。你看看吧!!!!!
[解决办法]
回溯 吧
[解决办法]
a[0]
4 a[1]
a[2] a[3] a[4]
a[5] a[6] a[7] a[8]
a[9] a[10] a[11] a[12] a[13]

if(s==13){
if(abs(4-a[1])!=a[0] or abs(a[2]-a[3])!=4 or ...就回
[解决办法]
5
4 9
7 11 2
8 1 12 10
6 14 15 3 13
[解决办法]


#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
int a,b,c,d,e;
int n=5;
int k=n*(n+1)/2;

for(a=1;a<=k;a++)
for(b=1;b<=k;b++)
for(c=1;c<=k;c++)
for(d=1;d<=k;d++)
for(e=1;e<=k;e++)
{
int x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15;
x1 = a; x2 = b; x3 = c; x4 = d; x5 = e; x6 = abs(-a + b); x7 = abs(-b + c); x8 = abs(-c + d); x9 = abs(-d + e); x10 = abs(-abs(-a + b) + abs(-b + c)); x11 = abs(-abs(-b + c) + abs(-c + d)); x12 = abs(-abs(-c + d) + abs(-d + e)); x13 = abs(-abs(-abs(-a + b) + abs(-b + c)) + abs(-abs(-b + c) + abs(-c + d))); x14 = abs(-abs(-abs(-b + c) + abs(-c + d)) + abs(-abs(-c + d) + abs(-d + e))); x15 = abs(-abs(-abs(-abs(-a + b) + abs(-b + c)) + abs(-abs(-b + c) + abs(-c + d))) + abs(-abs(-abs(-b + c) + abs(-c + d)) + abs(-abs(-c + d) + abs(-d + e))));

if(x10!=x1&&x11!=x1&&x11!=x10&&x12!=x1&&x12!=x10&&x12!=x11&&x13!=x1&&x13!=x10&&x13!=x11&&x13!=x12&&x14!=x1&&x14!=x10&&x14!=x11&&x14!=x12&&x14!=x13&&x15!=x1&&x15!=x10&&x15!=x11&&x15!=x12&&x15!=x13&&x15!=x14&&x2!=x1&&x2!=x10&&x2!=x11&&x2!=x12&&x2!=x13&&x2!=x14&&x2!=x15&&x3!=x1&&x3!=x10&&x3!=x11&&x3!=x12&&x3!=x13&&x3!=x14&&x3!=x15&&x3!=x2&&x4!=x1&&x4!=x10&&x4!=x11&&x4!=x12&&x4!=x13&&x4!=x14&&x4!=x15&&x4!=x2&&x4!=x3&&x5!=x1&&x5!=x10&&x5!=x11&&x5!=x12&&x5!=x13&&x5!=x14&&x5!=x15&&x5!=x2&&x5!=x3&&x5!=x4&&x6!=x1&&x6!=x10&&x6!=x11&&x6!=x12&&x6!=x13&&x6!=x14&&x6!=x15&&x6!=x2&&x6!=x3&&x6!=x4&&x6!=x5&&x7!=x1&&x7!=x10&&x7!=x11&&x7!=x12&&x7!=x13&&x7!=x14&&x7!=x15&&x7!=x2&&x7!=x3&&x7!=x4&&x7!=x5&&x7!=x6&&x8!=x1&&x8!=x10&&x8!=x11&&x8!=x12&&x8!=x13&&x8!=x14&&x8!=x15&&x8!=x2&&x8!=x3&&x8!=x4&&x8!=x5&&x8!=x6&&x8!=x7&&x9!=x1&&x9!=x10&&x9!=x11&&x9!=x12&&x9!=x13&&x9!=x14&&x9!=x15&&x9!=x2&&x9!=x3&&x9!=x4&&x9!=x5&&x9!=x6&&x9!=x7&&x9!=x8)


if(x1>0&&x2>0&&x3>0&&x4>0&&x5>0&&x6>0&&x7>0&&x8>0&&x9>0&&x10>0&&x11>0&&x12>0&&x13>0&&x14>0&&x15>0)
printf("%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d \n",x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15 );
}
return 0;
}

读书人网 >C#

热点推荐