------解决方案--------------------
第一个三角形:
6 2 5
4 3
1
第二个三角形:
6 10 1 8
4 9 7
5 2
3
第三个三角形:
13 3 15 14 6
10 12 1 8
2 11 7
9 4
5
给分吧!!
------解决方案--------------------
我把计算第二个三角形的代码发出来,计算第一个和第三个三角形的代码只是减少或增加几行而已,原理不变。
#include <IOSTREAM>
#include <MATH.H>
using namespace std;
#define COUNT 10
void InitialTower(int *p,int one,int two,int three,int four)
{
p[0]=one;
p[1]=two;
p[2]=three;
p[3]=four;
}
bool HaveRepeatNum(int *p,int len)
{
for (int i=0;i<len;i++)
{
for (int j=i+1;j<len;j++)
{
if (p[i]==p[j])
{
return true;
}
}
}
return false;
}
int main()
{
int Tower[COUNT]={0};
int Tower21,Tower22,Tower23;
int Tower31,Tower32;
int Tower41;
for (int i=1;i<=COUNT;i++)
{
for (int j=1;j<=COUNT;j++)
{
for (int k=1;k<=COUNT;k++)
{
for (int m=1;m<=COUNT;m++)
{
if (i==j
------解决方案--------------------
i==k
------解决方案--------------------
i==m
------解决方案--------------------
j==k
------解决方案--------------------
j==m
------解决方案--------------------
k==m)
{
continue;
}
InitialTower(Tower,i,j,k,m);
Tower21=abs(i-j);
Tower22=abs(j-k);
Tower23=abs(k-m);
Tower[4]=Tower21;
Tower[5]=Tower22;
Tower[6]=Tower23;
Tower31=abs(Tower21-Tower22);
Tower32=abs(Tower23-Tower22);
Tower41=abs(Tower32-Tower31);
Tower[7]=Tower31;
Tower[8]=Tower32;
Tower[9]=Tower41;
if (HaveRepeatNum(Tower,COUNT))
{
continue;
}
cout<<Tower[0]<<" "<<Tower[1]<<" "<<Tower[2]<<" "<<Tower[3]<<endl;
}
}
}
}
return 0;
}
由于倒三角的首行一旦确定,其下面内容就随之确定了,运行结果只输出倒三角最上面的4个数。
------解决方案--------------------
用程序做是一时求快,想给出楼主题目的解答,我本人是爱好数学的,我回去再想想用数学严格求解。
如果高斯再世,我想这题根本不在话下。