`
qinysong
  • 浏览: 193405 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

一道“正方体六个面上的四个角点整数之和相等”的求解问题

阅读更多

题目:
请将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、正方体的对边相等,如A1A2=A7A8、A2A6=A3A7等等;
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,A5不等于2,3

程序实现
通过以上算法分析,可用程序实现如下(Java实现):

java 代码
  1. package qinysong.arithmetic;   
  2.   
  3. public class CubeProblem {   
  4.   
  5.   public static void main(String[] args) {   
  6.     System.out.println("CubeProblem begin ........");   
  7.     searchPeekNumber();   
  8.     System.out.println("CubeProblem end   ........");   
  9.   }   
  10.   
  11.   public static void printPeekNumbers(int[] peeks){   
  12.     System.out.println("the peek number:A1=" + peeks[0] + ";A2=" + peeks[1]   
  13.                        + ";A3=" + peeks[2] + ";A4=" + peeks[3]   
  14.                        + ";A5=" + peeks[4] + ";A6=" + peeks[5]   
  15.                        + ";A7=" + peeks[6] + ";A8=" + peeks[7]);   
  16.   }   
  17.   
  18.   // 核心函数,探寻各个顶点的数值   
  19.   public static void searchPeekNumber(){   
  20.     int[] peeks = new int[8];   
  21.     int peekNumber = 0;   
  22.     for (int i=4; i<=8; i++){   
  23.       peeks[0] = 1;   
  24.       peeks[1] = i;   
  25.       for (int j=4; j<=8; j++){   
  26.         if (hasUsed(2,j, peeks)) continue;   
  27.         peeks[2] = j;   
  28.         peekNumber = getPeekNumber(3, peeks);   
  29.         peeks[3] = peekNumber;   
  30.         for (int k=4; k<=8; k++){   
  31.           if (hasUsed(4,k, peeks)) continue;   
  32.           peeks[4] = k;   
  33.           peekNumber = getPeekNumber(5, peeks);   
  34.           if (hasUsed(5,peekNumber, peeks)) continue;   
  35.           peeks[5] = peekNumber;   
  36.           peekNumber = getPeekNumber(6, peeks);   
  37.           if (hasUsed(6,peekNumber, peeks)) continue;   
  38.           peeks[6] = peekNumber;   
  39.           peekNumber = getPeekNumber(7, peeks);   
  40.           if (hasUsed(7,peekNumber, peeks)) continue;   
  41.           peeks[7] = peekNumber;   
  42.           printPeekNumbers(peeks);   
  43.         }   
  44.       }   
  45.     }   
  46.   }   
  47.   
  48.   /**  
  49.    * 判断获取的顶点值是否在之前的顶点使用过  
  50.    * @param index int 将要赋值的顶点索引  
  51.    * @param peekNumber int  获取的顶点值  
  52.    * @return boolean  是否在之前的顶点使用过  
  53.    */  
  54.   public static boolean hasUsed(int index, int peekNumber,int[] peeks){   
  55.     if (peekNumber <= 0return true;   
  56.     for (int i=0; i<index; i++){   
  57.       if (peeks[i] == peekNumber){   
  58.         return true;   
  59.       }   
  60.     }   
  61.     return false;   
  62.   }   
  63.   
  64.   /**  
  65.    * 取得某一顶点的数值  
  66.    * 根据推导公式:  
  67.    * A4=18-A1-A2-A3;A6=18-A1-A2-A5;A7=18-A1-A3-A5;A8=2*A1+A2+A3+A5-18;  
  68.    * 这里取 A1=1  
  69.    * @param peek int  顶点标号  
  70.    * @return int 顶点数值  
  71.    */  
  72.   public static int getPeekNumber(int peek, int[] peeks) {   
  73.     switch (peek) {   
  74.       case 0:   
  75.         return 1;   
  76.       case 3:   
  77.         return 17 - peeks[1] - peeks[2];   
  78.       case 5:   
  79.         return 17 - peeks[1] - peeks[4];   
  80.       case 6:   
  81.         return 17 - peeks[2] - peeks[4];   
  82.       case 7:   
  83.         return peeks[1] + peeks[2] + peeks[4] - 16;   
  84.       default:   
  85.         return 0;   
  86.     }   
  87.   }   
  88. }   


算法特性:
因为该算法是根据分析问题的数学模型,找到路径规律,然后直接推导答案,而不是采用通过遍历每一种可能性进行判断,所以效率比较好 

分享到:
评论
8 楼 qinysong 2006-11-20  
3、最小的数(如1)不能和次小的两个(如2,3)在同一边,最大的不和次大的两个在同一边;

这样表述就没有问题了吧?
7 楼 jkit 2006-11-20  
不知道这个贴的精华之处在什么地方。让人脑代替电脑做特定思考似乎不是什么值得称道的事。
大家不妨思考一下足球的每个面上的顶点之和都相等解法。看看人脑可以帮电脑做些什么,电脑可以帮人脑做些什么。
6 楼 jkit 2006-11-20  
1:从小到大排序,为了叙述方便假定得到数组v
2:如果v[0]+v[7]==v[1]+v[6]==v[2]+v[5]==v[3]+v[4]不成立则无解
3:输出v[0],v[7],v[6],v[1],v[5],v[2],v[3],v[4]
5 楼 qinysong 2006-11-20  
按照8个整数可以是任意的正整数,修正上面三个断言后为

1、每个面的面积相等,且每个面的面积为(8个数的总和)/2;
2、正方体的对边相等,如A1A2=A7A8、A2A6=A3A7等等;
3、最小的三个数(如1,2,3)肯定不在同一边,最大的三个数肯定不在同一边(通过这一推论可以减少探索方案);
4 楼 deafwolf 2006-11-19  
恩,我是说除了我引用的1和2,其他的都不算通用规则
3 楼 deafwolf 2006-11-19  
个人认为,解决这种问题,暴力的方法是穷举,那么相对不暴力的是回溯

只从题目上来看,唯一的判定条件是
引用
正方体六个面上的四个角点整数之和相等


引用

1、每个面的面积相等,且每个面的面积为36/2,即18
2、正方体的对边相等,如A1A2=A7A8、A2A6=A3A7等等

是由人推断出来的,对这个题目各种输入都成立的断言,其他断言不具有普遍意义,所以只能用于特定输入,这点上面已经提到了

所以这种问题需要遍历所有的可能性,因此提高效率的途径莫过于简化判定条件和尽早终止对某一分支的遍历(回溯)

在楼上思路的基础上,把类似a1=1,a2=2,a3=3,a4=4这种明显不成立的情况排除,就可以大幅减少判断次数,这时候效率就比较高了

PS:楼上的代码还真清爽,Haskell很有意思,受教了,多谢
2 楼 cookoo 2006-11-19  
暴力算法(in Haskell):

module Main where
import List

--参数值
node = [1..8]

--所有排列
permutation [] = [[]]
permutation xs = [x:ys | x <- xs, ys <- permutation (delete x xs)] 

--约束条件
condition (a1:a2:a3:a4:a5:a6:a7:a8:xs) = (a1 + a2 == a7 + a8) &&
                                         (a1 + a3 == a6 + a8) &&
                                         (a2 + a4 == a5 + a7) &&
                                         (a3 + a4 == a5 + a6) &&
                                         (a1 + a5 == a4 + a8) &&
                                         (a2 + a6 == a3 + a7)

--筛选(并去重复,如果参数值里有重复的话)
result = nub (filter condition (permutation node))

--打印个数
main = print (length result) 


结果有144个,约束只使用按原题简化的‘对边相等’条件,便于以后用任意8个参数值做实验,比如[2,2,3,3,5,6,7,8]有24个结果。然后可以考虑一下何时无解的问题。。。
1 楼 qinysong 2006-11-18  
后来一考虑,发现以上实现并不完整,把八个整数的特例1,2,3...8作为了题目的一部分,加强了题目约束。
如果完整的实现该题目,8个整数应该是作为参数输入系统,且也不能假定这些整数两两不等

相关推荐

    七年级数学上期末总复习.ppt

    6. **余角和补角**:余角是和另一个角相加等于90°的角,补角则是相加等于180°的角。两个角的余角或补角相等,只取决于它们的数量关系,而与它们的位置无关。例如,如果∠1+∠2=90°,那么∠1是∠2的余角,反之亦然...

    中考数学考前冲刺题4套2精选.doc

    6. 圆的切线性质与三角形面积:第六题涉及圆的切线性质,以及根据角度和半径计算三角形面积的问题。切线与半径形成的夹角与圆周角相等,可以通过这个性质来确定角度,然后利用三角形面积公式计算面积。 7. 因式分解...

    苏教版六年级数学上册各单元知识点汇总.pdf

    正方体是特殊的长方体,其6个面都是正方形且完全相同,有8个顶点和12条长度相等的棱。表面积的概念也被引入,长方体的表面积计算公式为(长×宽+长×高+宽×高)×2,正方体的表面积公式为棱长×棱长×6。此外,还涉及...

    上海市西中学人教版初中七年级数学上册第四章《几何图形初步》模拟检测卷(有答案解析).pdf

    6. 角平分线的性质:角平分线将原角分成两个相等的角,这对于解题至关重要。 7. 三角尺的应用:题目考察了使用三角尺摆放形成互余角的情况,要求学生理解直角三角形的性质。 8. 直线交点的最多与最少数量:平面...

    黑龙江哈尔滨市六年级(下)期末数学试卷(五四学制)_(含答案).doc

    3. 补角的概念:等角的补角相等是正确的,如果两个角是等角,那么它们的补角也一定是相等的。 4. 数轴上的点与有理数:在有理数中,正数是指大于零的数。题目列举了几个有理数,需要判断正数的个数。 5. 代数运算...

    湖南省长沙市七年级(上)期末数学试卷(含答案).pdf

    以上是试卷中涵盖的数学知识点,包括科学记数法、平行线性质、解方程、比例问题、几何序列、几何折叠、代数运算、绝对值和相反数、角度计算、整式化简、解方程、数轴距离、平行线和垂直线、购物策略、角平分线和平行...

    八年级数学第一学期期末试卷四.doc

    6. 等腰三角形的顶角:等腰三角形的顶角取决于外角,外角等于不相邻两底角之和。题目中给出一个等腰三角形的外角,需要推算顶角的度数。 7. 垂直平分线的性质:垂直平分线将线段分成相等的两部分,因此可以利用这个...

    吉林省长春市朝阳区2014年初中毕业生学业考试模拟(一)数学 无答案.doc

    4. 正方体的展开图:题目中涉及正方体的六个面,展示了正方体展开图,考察空间想象能力,找到相对面。 5. 不等式组的解集:不等式组的解集是满足所有不等式的x的值的集合。 6. 平行线性质:平行线性质涉及到角度...

    小学数学毕业专项复习 解决问题二 人教新课标版

    这些问题涵盖了小学数学的多个核心知识点,包括但不限于整数除法、余数的概念、周长与面积的计算、体积的理解、比例与比例关系、实际问题的解决策略以及几何图形的性质。以下是这些题目涉及的具体知识讲解: 1. ...

    河南省上蔡县2015 2016学年七年级数学上学期第二次月考试题(无答案) 新人教版.doc

    - 正方体的视图:问题13涉及正方体的三个视图,即俯视图、主视图和侧视图。 - 角度的计算:问题14中的∠CBD可以通过图形分析得出。 - 立体图形的视图:问题15要求识别立体图形的正面和侧面视图。 3. 解答题涉及...

    小学四年级数学竞赛试卷(附答案).pdf

    这份小学四年级数学竞赛试卷包含了多个数学知识点,主要涉及数的运算、逻辑推理、几何图形、数量关系和问题解决能力。以下是对试卷中各题目所涵盖知识点的详细解析: 1. **除法与余数**:题目要求找到除数,这涉及...

    七年级上册数学期末练习培优提高(三)精选.doc

    2. **正方体的平面展开图** - 正方体的六个面可以展开成一个平面图形,题目中涉及到了面的标记和相对位置。理解正方体的面与面的关系,如对面是相对的,对于解决这类问题至关重要。 3. **绝对值** - 绝对值表示一个...

    通用版六年级数学下册全年级知识点素材苏教版

    【通用版六年级数学下册全年级知识点素材苏教版】涵盖了多个数学概念,以下是这些概念的详细解析: **第一单元:方程** 方程是解决问题的重要工具,本单元主要涉及列方程解两步应用题和含有两个未知项的应用题。列...

    新北师大版丰富的图形世界测试卷及答案解析.doc

    - 正方形六个面上的整数和问题,利用相对面的数字和相等,可以求解整数的和。 - 正方体礼品盒的平面展开图问题,考虑相邻面的图案关系。 本测试卷旨在通过一系列问题,帮助学生巩固对几何体的理解,提高他们识别...

    2021—2022年部编版五年级数学上册期中考试题(1套).pdf

    10. 小数乘法的结果位数和四舍五入。 判断题主要测试学生对数学概念的理解,如: 1. 循环小数和无限小数的区别。 2. 两个三角形面积相等不一定意味着等底等高。 3. 自然数分类,包含0的特殊性。 4. 质数和合数之和...

    2020年五年级下册数学期中全优测评数学试卷(B卷)(附答案)人教版.pdf

    问题19求解两个质数的和与积,这是基础的数论问题。问题20通过观察几何图形推断所用正方体的数量。问题21要求填写合适的体积单位。问题22要求分数的通分和比较大小。问题23则列出了1到30内的奇数、合数、质数,以及...

    新版部编人教版五年级数学上册期中考试题及答案【精编】.pdf

    16. 3的倍数性质:选择题3中,判断3的倍数,需要各位数字之和能被3整除。 17. 连续自然数的和:选择题4中,三个连续自然数的和一定是3的倍数。 18. 形状变化:选择题5中,将长方形拉成平行四边形,周长不变,面积...

    人教小学数学五年级下册复习题学习教案.pptx

    - 把三个棱长为4厘米的正方体拼成长方体,表面积减少了4个正方形面的面积,体积是三个正方体体积之和。 3. 棱长总和与正方体的尺寸: - 正方体共有12条棱,若棱长总和为72厘米,则每条棱长为72/12=6厘米。 - ...

    长沙市2019-2020学年七年级上学期期末数学试题(II)卷.pdf

    - 题目23是一个几何体由多少个小正方体组成的问题,以及画出几何体的三视图。 这些题目全面覆盖了七年级上学期数学的基本知识点,旨在检测学生对基本概念、运算规则和几何图形的理解掌握程度。解答这些问题需要...

    河南省郑州外国语中学2017-2018学年九年级第三次质量检测数学试题.docx

    7. 矩形判定:在平行四边形中,若要判定为矩形,需要满足的条件之一是对角线互相平分且相等,或者一组邻边相等且一个角是直角。选项A、B、D中的条件均能判定,而C(AC=BD)无法单独证明是矩形,因为对角线相等的平行...

Global site tag (gtag.js) - Google Analytics