大数据结构实验资料报告材料 魔方阵.docVIP

大数据结构实验资料报告材料 魔方阵.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验报告 实验名称:(一)魔方阵(二)本科生导师制问题 实验类型:设计性实验 班级学号:2010063114 :万星含 (一)魔方阵 1.问题描述 魔方阵是一个古老的智力问题,它要求在一个m×m的矩阵中填入1~m2的数字(m为奇数),使得每一行、每一列、每条对角线的累加和都相等,如图1所示。 ②基本要求 l输入魔方阵的行数m,要求m为奇数,程序对所输入的m作简单的判断,如m有错,能给出适当的提示信息。 l实现魔方阵。 l输出魔方阵。 ③实现提示 本实验使用的数据结构是数组。 解魔方阵问题的方法很多,这里采用如下规则生成魔方阵。 l由1开始填数,将1放在第0行的中间位置。 l将魔方阵想象成上下、左右相接,每次往左上角走一步,会有下列情况: 2左上角超出上方边界,则在最下边相对应的位置填入下一个数字; 2左上角超出左边边界,则在最右边相应的位置填入下一个数字; 2如果按上述方法找到的位置已填入数据,则在同一列下一行填入下一个数字。 以3×3魔方阵为例,说明其填数过程,如图2所示。 由三阶魔方阵的生成过程可知,某一位置(x,y)的左上角的位置是(x-1,y-1),如果x-1≥0,不用调整,否则将其调整为x-1+m;同理,如果y-1≥0,不用调整,否则将其调整为y-1+m。所以,位置(x,y)的左上角的位置可以用求模的方法获得,即: x=(x-1+m)%m y=(y-1+m)%m 如果所求的位置已经有数据了,将该数据填入同一列下一行的位置。这里需要注意的是。此时的x和y已经变成之前的上一行上一列了,如果想变回之前位置的下一行同一列,x需要跨越两行,y需要跨越一列,即: x=(x+2)%m y=(y+1)%m ④思考 l可以考虑使用其他方法生成魔方阵。任何算法都有不同的实现方法,通过采用不同实现方法来重新实现算法,这要比单纯学习算法的效果好得多。 2.实验要求 (1) 认真阅读和掌握和本实验相关的教材容、算法和设计程序。 (3) 上机运行程序。 (4) 保存和打印出程序的运行结果,并结合程序进行分析。 3.实验目的 (1)设计数据结构; (2)设计算法完成任意n阶魔方阵的填数; (3)分析算法的时间复杂度。 程序源代码 #include stdio.h #include stdlib.h #define MAX_NUM 500 /*这里可以修改最大阶*/ int main() { int rows = 0, center = 0, iArray[MAX_NUM][MAX_NUM]; int RowSet = 0, LineSet = 0, newRowSet = 0, newLineSet = 0; int i = 0, j = 0; int okNum = 0; // set the items of array iArray to be 0 for ( i = 0; i MAX_NUM; i++ ) for ( j = 0; j MAX_NUM; j++ ) iArray[i][j] = 0; // get the rows number while ( 1 ) { printf(输入行数:\n); scanf(%d, rows); if ( rows = MAX_NUM ) { rows -= 1; break; } else { printf(行数必须在 0 和 %d 之间, 请重新, MAX_NUM); } } // set number 1 center = rows / 2; iArray[0][center] = 1; // initialize the okNum, RowSet and LineSet okNum = 1; RowSet = 0; LineSet = center; // set each item in iArray while ( okNum (rows + 1) * (rows + 1) ) { if ( RowSet == 0 LineSet == rows ) { RowSet += 1; } else { newRowSet = (RowSet == 0) ? rows : RowSet - 1; newLineSet = (LineSet == rows) ? 0 : LineSet + 1; if ( iArra

文档评论(0)

linlin921 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档