有趣问题收集.docxVIP

  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文档。上传文档
查看更多
有趣问题收集

有趣问题收集任意阶幻方的实现:求解思路:1.奇数阶幻方把1(或最小的数)放在第一行正中;按以下规律排列剩下的(n×n-1)个数:(1)每一个数放在前一个数的右上一格;(2)如果这个数所要放的格已经超出了顶行那么就把它放在底行,仍然要放在右一列;(3)如果这个数所要放的格已经超出了最右列那么就把它放在最左列,仍然要放在上一行;(4)如果这个数所要放的格已经超出了顶行且超出了最右列,那么就把它放在前一个数的下一行同一列的格内;(5)如果这个数所要放的格已经有数填入,那么就把它放在前一个数的下一行同一列的格内。2.双偶数阶幻方所谓双偶阶幻方就是当n可以被4整除时的偶阶幻方,即4K阶幻方。(1)先把数字按顺序填。然后,按4×4把它分割成4块。(2)每个小方阵对角线上的数字,换成和它互补的数。3.单偶数阶幻方(1)把方阵分为A,B,C,D四个象限,这样每一个象限肯定是奇数阶。用罗伯法,依次在A象限,D象限,B象限,C象限按奇数阶幻方的填法填数。(2)在A象限的中间行、中间格开始,按自左向右的方向,标出k格。A象限的其它行则标出最左边的k格。将这些格,和C象限相对位置上的数,互换位置。(3)在B象限任一行的中间格,自右向左,标出k-1列。(注:6阶幻方由于k-1=0,所以不用再作B、D象限的数据交换),将B象限标出的这些数,和D象限相对位置上的数进行交换,就形成幻方。4.大于0的自然数,除2以外,都可以生成幻方。分析与算法:// huanfang.cpp#include iostream using namespace std; int matrix[99][99] = {0}; //生成奇数幻方void CreateOddMagicSquare(int n) { int x=0,y,mun =1; y=n/2; while ( mun = n*n ) { matrix[x][y] = mun; //通过x0、y0检测右上的是否已经填入数字int x0=x; int y0=y; x0--; y0++; //超界处理 if(x00) x0+=n; if(y0 == n) y0= n - y0; if(0 == matrix[x0][y0] ) { x = x0; y = y0; } else { //若有数字填入之前数字的下方 x++; if(x == n) x = x-n; } mun ++; } } //生成双偶幻方void CreateDoubleEvenMagicSqure( int n ) { intnum = 1; //从1到n的平方依次赋值 for(inti=0;in;i++) for(int j=0;jn;j++) matrix[i][j] = num++ ; //小正方形的对角线上的数字取其补数 for(inti=0;in;i++) for(int j=0;jn;j++) { if(i%4==0 abs(i-j)%4 == 0) for(int k=0;k4;k++) matrix[i+k][j+k] = abs( n*n +1 - matrix[i+k][j+k] ); else if (i%4==3 (i+j)%4 == 3) for(int k=0;k4;k++) matrix[i-k][j+k] = abs( n*n +1 - matrix[i-k][j+k] ); } } //生成单偶幻方void CreateSingleEvenMagicSqure(int n) { int k = n/2; CreateOddMagicSquare(k); //赋初值,左上最小,右下其次,右上再次,左下最大 for(inti=0;ik;i++) for(int

文档评论(0)

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

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

1亿VIP精品文档

相关文档