用C++编写一个程序求奇数幻方.docVIP

  • 93
  • 0
  • 约1.64千字
  • 约 3页
  • 2019-09-08 发布于江西
  • 举报
一、实验目的 1. 调研并熟悉幻方的基本功能、数据流程与工作规程; 2. 学习与幻方相关的参考资料和基于C++集成环境的编程技术; 3. 通过实际编程加深对基础知识的理解,提高实践能力; 4. 学习开发资料的收集与整理,学会撰写课程设计报告。 二、实验问题描述 幻方就是一个方阵,有着自己的规则和定义。幻方可分为奇阶幻方和偶阶幻方,同时偶阶幻方又可以分为双偶阶和单偶阶(所谓双偶阶就是指N能被4整除,单偶阶就是指能被2整除但不能被4整除)。奇阶幻方比偶阶幻方简单一些(这次实验只讨论奇数幻方)。幻方的规则就是它每一行和每一列的和及两条对角线的和要相等,每列,每行,每条对角线的和称之为幻和。这样你排出来的才叫幻方,否则没有条理,那样就没有意义了。幻方中所排的数就是从1开始到N的平方结束。【幻方要运用到数组的知识、循环体结构等知识。】 三、实验步骤 1、实验问题分析 1:这次实验所用到的数据结构是二维数组。 2:这方面使用二维数组a[MAX][MAX]来静态存储不超过MAX行MAX列的数组方阵,其中n(1≤2*n+1≤100)为满足条件的数。 3:首先,输入一个数字n(1≤2*n+1≤100),则输出对应的n阶魔方阵,并输出每一行、每一列、每条对角线上各个数字累加和。使用二维数组输出幻方阵,用函数实现相应的功能。输入形式:数字n(1≤2*n+1≤100)。输出形式:(1)以矩阵形式输出n(1≤2*n+1≤100)阶魔方阵;(2)输出每一行、每一列、每条对角线上各个数字累加和。 2、功能(函数)设计 主要使用与实现如下函数: int main()函数,主函数,n为奇数实现n阶魔方阵,实现思想如下; a.在1到num的数字中,选择1开始填充魔方,将数字1填入第一行的中间方格中,即(0,(n-1)/2)的位置。 b.向已填充的前一个数字位置(i,j)的左上角(i-1,j-1)填入下一个数字,如果出现以下情况,则修改填充位置: i)若填充位置超出上边界,则修改为下边界的相应位置,即把i-1修改为j-1; ii)若填充位置超出左边界,则修改为最右边的相应位置,即把i-1改为n-1; iii)若填充位置已有数字,则填充位置修改为下一行的同一位置。 c.重复以上步骤,直至将num个数字全部填入魔方中。 四、实验结果(程序)及分析 1、实验主要代码: #includeiostream.h int a[101][101]; int main() { int n; cout请输入奇数幻方的阶数(阶数不大于100):; cinn; int i=0,j=(n-1)/2; a[i][j]=1; for(int num=2;num=n*n;num++) { --i; --j; if(i0 j=0) { i=n-1; } else if(i=0 j0) { j=n-1; } if((i0 j0) || (a[i][j]0)) { i+=2; ++j; } a[i][j]=num; } cout这个n阶幻方为:endl; for(int hang=0;hangn;hang++) { for(int lie=0;lien;lie++) { couta[hang][lie] ; } coutendl; } return 0; } 2、测试数据与输出: 3、调试过程中出现的问题以及解决策略: Ⅰ:遇见的问题 开始把数组a[n][n]定义在主函数main()内,则出现了以下错误 Ⅱ:解决策略 查阅资料(上网、参考书),找出解决方案,修改程序

文档评论(0)

1亿VIP精品文档

相关文档