题目:
请将8个给定的正整数(如1,2,3,4,5,6,7,8)分别放在一个正方体的8个角的顶点上,以实现如下要求(如果可能):正方体六个面上的四个角点整数之和相等?输出结果如:A1=1,A2=2...
求解如下
算法思路
根据题境,我们先做如下设定和术语说明,以便于后面的讨论:
1、正整数以1,2,3,4,。。。8表示,以便进行分析;
2、正方体顶点标示如上所示;
3、每一个面的四个顶点数总和,我们称为该面的面积;
4、每一条边的两个顶点数和,我们称为该边的长度;
通过分析,可以得到如下断言为真(采用上面设定及术语):
1、每个面的面积相等,且每个面的面积为36/2,即18;
2、正方体的对边相等;
3、整数1和(2,3)不在同一边,整数7和8不在同一边;
根据所得断言,可以得到如下求导公式和约束:
A1=1;
A4=18-A1-A2-A3=17-A2-A3;
A6=18-A1-A2-A5=17-A2-A5;
A7=18-A1-A3-A5=17-A3-A5;
A8=A1+A2-A7=2*A1+A2+A3+A5-18=A2+A3+A5-16;
A2,A3,A5为可变量,但是A2,A3不等于2,3
程序实现
通过以上算法分析,可用程序实现如下(Java实现):
packageqinysong.arithmetic;
publicclassCubeProblem{
publicstaticvoidmain(String[]args){
System.out.println("CubeProblembegin........");
searchPeekNumber();
System.out.println("CubeProblemend........");
}
publicstaticvoidprintPeekNumbers(int[]peeks){
System.out.println("thepeeknumber:A1="+peeks[0]+";A2="+peeks[1]
+";A3="+peeks[2]+";A4="+peeks[3]
+";A5="+peeks[4]+";A6="+peeks[5]
+";A7="+peeks[6]+";A8="+peeks[7]);
}
//核心函数,探寻各个顶点的数值
publicstaticvoidsearchPeekNumber(){
int[]peeks=newint[8];
intpeekNumber=0;
for(inti=4;i<=8;i++){
peeks[0]=1;
peeks[1]=i;
for(intj=4;j<=8;j++){
if(hasUsed(2,j,peeks))continue;
peeks[2]=j;
peekNumber=getPeekNumber(3,peeks);
peeks[3]=peekNumber;
for(intk=2;k<=8;k++){
if(hasUsed(4,k,peeks))continue;
peeks[4]=k;
peekNumber=getPeekNumber(5,peeks);
if(hasUsed(5,peekNumber,peeks))continue;
peeks[5]=peekNumber;
peekNumber=getPeekNumber(6,peeks);
if(hasUsed(6,peekNumber,peeks))continue;
peeks[6]=peekNumber;
peekNumber=getPeekNumber(7,peeks);
if(hasUsed(7,peekNumber,peeks))continue;
peeks[7]=peekNumber;
printPeekNumbers(peeks);
}
}
}
}
/**
*判断获取的顶点值是否在之前的顶点使用过
*@paramindexint将要赋值的顶点索引
*@parampeekNumberint获取的顶点值
*@returnboolean是否在之前的顶点使用过
*/
publicstaticbooleanhasUsed(intindex,intpeekNumber,int[]peeks){
if(peekNumber<=0)returntrue;
for(inti=0;i<index;i++){
if(peeks[i]==peekNumber){
returntrue;
}
}
returnfalse;
}
/**
*取得某一顶点的数值
*根据推导公式:
*A4=18-A1-A2-A3;A6=18-A1-A2-A5;A7=18-A1-A3-A5;A8=2*A1+A2+A3+A5-18;
*这里取A1=1
*@parampeekint顶点标号
*@returnint顶点数值
*/
publicstaticintgetPeekNumber(intpeek,int[]peeks){
switch(peek){
case0:
return1;
case3:
return17-peeks[1]-peeks[2];
case5:
return17-peeks[1]-peeks[4];
case6:
return17-peeks[2]-peeks[4];
case7:
returnpeeks[1]+peeks[2]+peeks[4]-16;
default:
return0;
}
}
}
执行结果如下
CubeProblembegin........
thepeeknumber:A1=1;A2=4;A3=6;A4=7;A5=8;A6=5;A7=3;A8=2
thepeeknumber:A1=1;A2=4;A3=7;A4=6;A5=8;A6=5;A7=2;A8=3
thepeeknumber:A1=1;A2=4;A3=8;A4=5;A5=6;A6=7;A7=3;A8=2
thepeeknumber:A1=1;A2=4;A3=8;A4=5;A5=7;A6=6;A7=2;A8=3
thepeeknumber:A1=1;A2=6;A3=4;A4=7;A5=8;A6=3;A7=5;A8=2
thepeeknumber:A1=1;A2=6;A3=7;A4=4;A5=8;A6=3;A7=2;A8=5
thepeeknumber:A1=1;A2=6;A3=8;A4=3;A5=4;A6=7;A7=5;A8=2
thepeeknumber:A1=1;A2=6;A3=8;A4=3;A5=7;A6=4;A7=2;A8=5
thepeeknumber:A1=1;A2=7;A3=4;A4=6;A5=8;A6=2;A7=5;A8=3
thepeeknumber:A1=1;A2=7;A3=6;A4=4;A5=8;A6=2;A7=3;A8=5
thepeeknumber:A1=1;A2=7;A3=8;A4=2;A5=4;A6=6;A7=5;A8=3
thepeeknumber:A1=1;A2=7;A3=8;A4=2;A5=6;A6=4;A7=3;A8=5
thepeeknumber:A1=1;A2=8;A3=4;A4=5;A5=6;A6=3;A7=7;A8=2
thepeeknumber:A1=1;A2=8;A3=4;A4=5;A5=7;A6=2;A7=6;A8=3
thepeeknumber:A1=1;A2=8;A3=6;A4=3;A5=4;A6=5;A7=7;A8=2
thepeeknumber:A1=1;A2=8;A3=6;A4=3;A5=7;A6=2;A7=4;A8=5
thepeeknumber:A1=1;A2=8;A3=7;A4=2;A5=4;A6=5;A7=6;A8=3
thepeeknumber:A1=1;A2=8;A3=7;A4=2;A5=6;A6=3;A7=4;A8=5
CubeProblemend........
算法特性
因为该算法是根据分析问题的数学模型,找到推导公式及数值约束,然后直接推导答案,而不是采用通过遍历每一种可能性进行判断,所以效率非常好
分享到:
相关推荐
WPF按着正方体的翻动动画,面上有控件WPF按着正方体的翻动动画,面上有控件
三角形,正方体 3D VC OPENGL
技术要求:windows下opencv3.2, C++语言 需要功能:30fps, 对立方体上表面四个角点进行跟踪,能返回四个坐标值,用红点标出,分辨率为800x600. 每30帧确保5帧以下的错误率。
六年级上册第一单元长方体和正方体知识点.pdf
计算机图形学的一个经典案例,正方体在四个面上的投影,程序注解详细
长方体和正方体切拼练习题 一、判断: (1)长方体有6个面,可能会有4个面面积相同。( ) (2)棱长是6分米的正方体体积与表面积一样大。( ) (3)1立方米铁的体积比1立方米的棉花体积大。 ( ) (4)...
* 正方体的六个面的面积都相等,所以正方体表面积=棱长×棱长×6=a×a×6=6a^2=任意一个面的面积×6 【知识点 4】表面积求法的变形 * 贴商标类型:只求四周面积。 * 游泳池类型:只求四周和底面。 * 抽纸盒类型:...
长方体和正方体知识点归纳.doc
知识点6:分析长方体和正方体的展开图 通过分析长方体和正方体的展开图,学生可以发现它们之间的规律和模式。例如,学生可以发现某些展开图形中间隔着一个面,而其他展开图形中则没有这种情况。 知识点7:解决问题...
长方体和正方体解决问题.pdf长方体和正方体解决问题.pdf长方体和正方体解决问题.pdf长方体和正方体解决问题.pdf长方体和正方体解决问题.pdf
* 长方体有8个顶点、12条棱和6个面,其中有3个面是正方形。 * 长方体的体积计算公式:V = lwh(l为长、w为宽、h为高)。 * 长方体的表面积计算公式:S = 2lw + 2lh + 2wh。 正方体 * 正方体是一种特殊的长方体,长...
定义一个球为中心,一个正方体沿以这个球心为圆心的圆周移动。正方体的正面永远朝向球心进行平滑旋转。
2022五年级下册数学长方体和正方体知识点.pdf
3D正方体
长方体和正方体的认识课件制作的swf格式的文件
当桌面变成正方体可以四个面都开东西 是为XP和win7做的桌面美化的好东西 当桌面变成正方体可以四个面都开东西 是为XP和win7做的桌面美化的好东西
五年级数学下册长方体和正方体的体积之四人教.pptx
用VC6.0和OpenGL实现正方体旋转和正方体的六个面实现相同的纹理映射,程序能运行……
长方体和正方体错题总集 一.填空题。 1.0.08立方米=( )升=( )毫升 3.8升=( )升( )毫升 6.47升=( )毫升=( )立方分米 415平方厘米=( )平方米 10020立方分米=( )立方米 20升=( )立方米 9.08...
C# OPENGL正方体旋转并实现产生随机点