回 帖 发 新 帖 刷新版面

主题:[讨论]2道程序题~~~大家给点思路

1.Description 

欧拉证明了素数有无穷多个这一经典数学理论。但是每个整数能表示成四个素数之和吗?希望你能帮我们高效地解决这一问题。在这个问题中,素数的定义为“一个素数是指一个正整数,且该正整数有且只有两个不同的因子”。例如37是一个素数,因为它只有两个不同的因子37和1。
Input 

输入文件中包含多个测试数据。每个测试数据占一行,为一个正整数N(0<N<=10000000),这个数就是你需要把它表示成四个素数之和的数。N=0表示输入结束。
 
Output 

对输入文件中的每个测试数据,如果N能表示成四个素数之和,则输出字典序最小的一个组合,例如,40可以分解成3+7+13+17,也可分解成5+7+11+17,还可以分解成2+2+5+31等等,其中字典序最小的是最后一个组合。如果这个数不能表示为四个素数之和,那么输出一行"Impossible"。
Sample Input 
40
27

Sample Output 
2 2 5 31
2 3 3 19 

2.你知道什么是骰子吗?骰子是一个六面立方体,每一面对应一到六的数字,并且在每个面上用相应的点表示数字。
游戏开始时,骰子平稳的放在桌上,游戏中,骰子可由庄家决定向任何方向滚动。如果你能猜出骰子停止滚动时朝上面的数字,你就赢了。
现在要求你编写一道程序来模拟骰子的滚动。为了简单起见,我们假设骰子既不滑动也不会跳动,只在桌子上向四个方向滚动,即东南西北。当游戏开始时,庄家都把骰子放在桌子中央并使它的一、二、三分别对应上、北和西。对于另外的三个面,可以通过一条规则计算出来:任何相对的两面的和都等于七。
你的程序应能接受一系列的输入命令,任何一条命令应是"north"、"east"、"south"或"west"之一。“北”命令即指骰子滚向北面,也就是说,朝向上的面成为了新的北面,而原来的北面则成为了新的底。其它命令也相应地使骰子滚向对应的方向。你的程序必须算出骰子经过一系列滚动后面朝上的数字。设桌子足够大,骰子永远不会掉下

回复列表 (共4个回复)

沙发

关于第一题,我初步的想法是:
先将输入数X减去 6 (3个最小的质数2)
找出小于等于该数(X-6)的最大质数 J
将该数和最大质数的差(X-6-J),分配到3个最小质数上去,看能不能配出三个质数

将差额加2,求出小于等于:(X-6-J+2),的最大质数 K
K-2,为分配到第三个质数的部分,还剩下:(X-6-J+2)-(K-2),再把它分到剩下的2个最小质数上去

没验证过,只是个初步想法

板凳

再说说第二题,也仅仅是个思路:

我把六面体的重心做为坐标原点,X轴向右延,Y轴向上,Z轴向内,
把六个面以中心点坐标表示出来,如朝上的面的坐标为:
(0,1,0)
骰子滚向北,坐标的变换矩阵为:
1         0           0
0   cos(-90)   -sin(-90)
0   sin(-90)    cos(-90)
即为:
北:
   1  0  0
   0  0  1
   0 -1  0
南:
   1  0  0
   0  0 -1
   0  1  0
东:
   0  1  0
  -1  0  0
   0  0  1
西:
   0 -1  0
   1  0  0
   0  0  1
原坐标 * 变换矩阵 = 新坐标
因为矩阵运算满足结合率,所以
原坐标 * 变换1 * 变换2 * ... * 变换n = 原坐标 * ( 变换1 * 变换2 * ... * 变换n)
得到:
原坐标 * 总变换 = 新坐标
把现在面朝上的面,变换前在哪里找出来,就知道是几点了,因为原位置每一面的点数都是清楚的
原坐标 * 总变换 = (0,1,0)
求原坐标

这就是我的思路了

3 楼


暂时还不能完全理解,不过非常感谢你的答复!

4 楼

你好.我是全职网赚工作者.
如果你有时间有电脑.
想在网络上创业.请联系我..
项目绝对真实.详情QQ空间资料
加盟请联系 QQ908889846

我来回复

您尚未登录,请登录后再回复。点此登录或注册