c任务书-幻方问题.

合集下载

c++课程设计报告--幻方

c++课程设计报告--幻方

C++程序设计课程设计报告选题名称:幻方系(院):计算机工程学院专业:计算机科学与技术班级:姓名:学号:指导教师:学年学期:2010 ~ 2011 学年第 1 学期2010 年12 月30 日设计任务书指导教师(签章):年月日摘要:所谓幻方,就是一个n行n列的正方形,共有n2个格子,将1、2、3、……、n2这些数字放到这些格子里,使其每行的和、每列的和及两条对角线的和都是一个相同的数S,S称为幻和。

当n为奇数时,称为奇数阶幻方,当n为偶数时,称为偶阶幻方。

当n可被4整除时,称方为双偶幻方。

当n不可被4整除时,称为单偶幻方。

多少年来,许多数学家都在研究这个古老而有趣的问题,试图找出一般的解法,但一般都是针对当n是奇数和n是4的倍数的情况。

当n是奇数时的算法:首先,将1放在第一行中间一个格子里。

其次,依次将后一个数放到前一个数的右上格,如:将2放到1的右上格。

将3放到2的右上格等等。

可能出现下面的情况。

①若右上格从上面超出,则将后一数放到与右上格同列的最后一行。

②若右上格从右面超出,则将后一数放到与右上格同行的最后一列。

③若右上格既从右面超出又从上面超出,则将后一数放到一数前一数的下面前一数的下面。

④若右上格已被数字填充,则将后一数放到前一数的下面依以上法则,你可以很快的写出奇数阶幻方!当然,这种写法只是其中一个答案,而不是唯一答案。

关键字:奇数幻方;单偶数幻方;双偶数幻方;循环;类的对象;目录1课题综述 (4)课题来源 (4)预期目标 (5)面对的问题 (5)需解决的关键技术 (5)2系统分析 (6)涉及的基础知识 (6) (6) (6) (7) (7)解决问题的基本思路及总体方案 (8)算法描述及功能模块框图 (8)2.3.1奇数阶幻方(连续摆数法) (8)2.3.2双偶幻方(对称幻方) (9)2.3.3单偶幻方(斯特雷奇法) (11)2.3.4LUX方法这是剑桥大学康韦教授发明的方法 (12)3系统设计 (13)实现方法 (13)3.1.1奇数阶幻方制作(连续摆数法) (13)3.1.2双偶幻方制作(对称法) (13)幻方制作(斯特雷奇法) (13)3.2流程图 (14) (14) (15)4 代码编写与注释 (15)5程序调试 (20)6运行与测试 (20)总结 (23)致谢 (24)参考文献 (25)1课题综述幻方又称为魔方,方阵或厅平方,它最早起源于我国。

幻方题目解题思路

幻方题目解题思路

幻方题目解题思路幻方这玩意儿挺有趣的呢!咱来唠唠解题思路哈。

一、啥是幻方首先得知道幻方是个正方形的格子阵,就像九宫格那种(当然也有其他规格的,像四阶幻方啥的)。

每一行、每一列还有对角线上的数字加起来都得等于同一个数,这个数就叫幻和。

二、三阶幻方(九宫格)的基本思路1. 确定幻和- 对于三阶幻方(3×3的格子),因为1 + 2+3+4+5+6+7+8+9 = 45,这9个数要平均分配到三行(或者三列),所以幻和就是45÷3 = 15。

2. 找中心数- 在三阶幻方里,中心数特别重要。

因为它会在四条线上(一行、一列和两条对角线)参与求和。

- 假设中心数是x,那么它在四条线上相加的总和就是4x。

其他八个数两两组合成四组,每组和都等于幻和 - x。

- 经过计算就会发现中心数是5(你可以自己试着推导一下哦,挺好玩的)。

3. 填角上的数- 角上的数也很关键。

一般先从和5能凑成15的数开始考虑,像1、9,2、8,3、7,4、6这几组。

- 先试着把1放在左上角(只是个例子,放哪儿都行开始),那它对角就得是9,这样才能保证对角线的和是15。

然后再根据每行每列的和是15慢慢填其他的数。

1. 连续自然数幻方- 对于四阶幻方,1到16这16个数的和是136。

因为要四行(或四列),所以幻和是136÷4 = 34。

- 有一种方法叫“对称交换法”。

先把1到16按顺序填到四阶方阵里,就像从左上角开始横着填。

- 然后把对角线上的数保留,其他的数关于中心对称交换位置。

这样就得到了四阶幻方。

- 更高阶的幻方也有一些类似的方法,不过会更复杂一些。

2. 不是连续自然数的幻方- 如果不是1、2、3……这样连续的数,那首先得算出这些数的总和,然后确定幻和(总和除以阶数)。

- 然后可以先找一个和这些数相近的连续自然数幻方,再通过调整数字的大小来得到想要的幻方。

总之呢,幻方就像一个数字谜题,要根据幻和、数字的规律还有一些特殊位置(像中心数、角上数)的特点来慢慢拼凑出答案,多试几次就会找到感觉啦!。

验证三阶幻方c语言解法,C语言三阶幻方求解.doc

验证三阶幻方c语言解法,C语言三阶幻方求解.doc

验证三阶幻⽅c语⾔解法,C语⾔三阶幻⽅求解.docC语⾔三阶幻⽅求解.doc三阶幻⽅.cpp : Defines the entry point for the console application./* 操作系统:Windows XP * 编译环境:Microsoft VisualC+6.0 * * 程序编写:万传华 * 联系邮箱: */求解幻⽅/ a b c/ d e f/ g hi/a+e+i=15/b+e+h=15/c+e+g=15/d+e+f=15/-(a+b+c+d)+(i+h+g+f)+4*e=60/-(a+b+c+d+e+f+g+h+i)+3*e=60/-3*15+3*e=60/-e=5/f=15-e-d=10-d,g=15-e-c=10-c=10-(15-a-b)=a+b-5,/h=15-e-b=10-b,i=15-e-a=10-a,/a+d+g=15/a+d+ (15-c-e)=15/a+d+(15-(15-a-b)-5)=15/2*a+b+d=20/同理2*c+b+f=20,2*g+d+h=20,2*i+f+h=20/⽤a、b两个未知数可解其它/ ab 15-a-b/20-2*a-b 5 2*a+b-10/a+b-5 10-b 10-a/需要检验/1.数字是否重复/2.数字范围1,9/a,b,5,(15-a-b),(20-2*a-b),(2*a+b-10),(a+b-5),(10-b),(10-a)两两不等-/ab,a5,b5,a+b10,2*a+b15,a+2*b15,3*a+b20,3*a+2*b25/1=a=9,1=b=9,1=15-a-b=9,1=20-2*a-b=9,1=2*a+b-10=9,1=a+b-5=9,1=10-b=9,1=10-a=9 -/1=a=9,1=b=9,6=a+b=14,11=2*a+b=19/假如a=1,根据11=2*a+b=19,1=b=9,9=a+b=14,可得b=9,可是a+b10,故b⽆解/假如a=2,b=7或者9,满⾜所有条件/./#include stdafx.h#include stdio.h#include stdlib.h#include conio.hvoid test()int i,j,count=0;for(i=1;i10;+i)if(i=5) continue;for(j=1;j10;+j)if(i=j)continue;if(j=5) continue;if(i+j6) continue;if(i+j14) continue;if(2*i+j11) continue;if(2*i+j19) continue;if(i+j=10)continue;if(2*i+j=15) continue;if(i+2*j=15) continue;if(3*i+j=20) continue;if(3*i+2*j=25) continue;printf(n第%d解:n,+count);printf(t%d,%d,%dn,i,j,15-i-j);printf(t%d,%d,%dn,20-2*i-j,5,2*i+j-10);printf(t%d,%d,%dn,i+j-5,10-j,10-i);printf(n共找到%d解n,count);void show(int *M,unsigned rows,unsigned cols)printf(n);for(unsigned i=0;irows;+i)for(unsignedj=0;jcols;+j)printf(%d, ,*M+);printf(n);printf(n);/整数型⽅程/⽅程数FCS1,未知数WZS1,FCS=WZS/int *M ,每⾏⼀个表达式(共FCS⾏),共WZS+1列(加常数列)int gcd(int a,int b)int c;/处理ba的情况if(ba)c=a,a=b,b=c;doc=a%b,a=b,b=c;while(c);return a;/整数型⽅程/⽅程数FCS1,未知数WZS1,FCS=WZS/int *M ,每⾏⼀个表达式(共FCS⾏),共WZS+1列(加常数列)void Equation(int*M,unsigned FCS,unsigned WZS)unsigned row,col,i,j,t;int *P,*Q;/⽤于访问数组,指向当前操作的⽅程式intx,y,z,k;+WZS;row=0,col=0,P=M;/参考数row,coldo/寻找⾮零参考数t=row;Q=P;while(Qcol=0)+t;Q+=WZS;if(t=FCS)break;if(t=FCS)+col;continue;if(P!=Q)/交换for(j=0;jWZS;+j)k=Pj;Pj=Qj;Qj=k;z=Pcol;/参考数位置:row⾏,col列/消元for(i=row+1,Q=P+WZS;iFCS;+i,Q+=WZS)/第i⾏y=Qcol;if(y=0) continue;k=gcd(abs(z),abs(y);x=z/k,y/=k;for(j=0;jWZS;+j)/第j 列Qj=Qj*x-Pj*y;/show(M,FCS,WZS);/调试输出/getch();+row,+col,P+=WZS;while(rowFCS & colWZS);/show(M,FCS,WZS);/中间结果/寻找⾮零参考数row=FCS,P=M+row*WZS;do col=0;-row;P-=WZS;while(Pcol=0)+col;if(col=WZS)break;if(col=WZS)continue;/简化for(j=0;jWZS;+j)x=Pj;if(x!=0) break;if(x!=0)x=abs(x);for(;jWZS;+j)y=Pj;if(y=0)continue;x=gcd(x,abs(y);if(x1)for(j=0;jWZS;+j)Pj/=x;/消元z=Pcol;Q=P-WZS;i=row;while(i-)/第i⾏,i=0,row)y=Qcol;if(y!=0)k=gcd(abs(z),abs(y);x=z/k,y/=k;for(j=0;jWZS;+j)/第j列,j=col,WZS)Qj=Qj*x-Pj*y;Q-=WZS;while(row0 & col0);void huajian()const unsigned fcs=8;const unsigned wzs=9;intMfcswzs+1=/x12,x13,x21,x22,x31,x32,x33,x11,x231,1,0,0,0,0,0,1,0,-15,0,0,1,1,0,0,0,0,1,-15,0,0,0,0,1,1,1,0,0,-15,0,0,1,0,1,0,0,1,0,-15,1,0,0,1,0,1,0,0,0,-15,0,1,0,0,0,0,1,0,1,-15,0,0,0,1,0,0,1,1,0,-15,0,1,0,1,1,0,0,0,0,-15,;Equation(&M00,fcs,wzs);for(int i=0;ifcs;+i)for(int j=0;j=wzs;+j)printf(%d, ,Mij);printf(n);/*结果1, 0, 0, 0, 0, 0, 0, 2, -1, -10,0, 1, 0, 0, 0, 0, 0, -1, 1, -5,0, 0, 1, 0, 0, 0, 0, 0, 1, -10,0, 0, 0, 1, 0, 0, 0, 0, 0, -5,0, 0, 0, 0, 1, 0, 0, 1, -1, -5,0, 0, 0, 0, 0, -1, 0, 2, -1, 0,0, 0, 0, 0, 0, 0, -1, -1, 0, 10,0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-x12=-2x11+x23+10x13=x11-x23+5x21=-x23+10x22=5x31=-x11+x23+5x32=-2x11+x23x33=-x11+10*/int main(int argc, char* argv)/huajian();test();return 0;/*第1解:2,7,69,5,14,3,8第2解:2,9,47,5,36,1,8第3解:4,3,89,5,12,7,6第4解:4,9,23,5,78,1,6第5解:6,1,87,5,32,9,4第6解:6,7,21,5,98,3,4第7解:8,1,63,5,74,9,2第8解:8,3,41,5,96,7,2*。

C++9018:1688——神奇的幻方[NOIP2015提高组]

C++9018:1688——神奇的幻方[NOIP2015提高组]

C++9018:1688——神奇的幻⽅[NOIP2015提⾼组]题⽬描述幻⽅是⼀种很神奇的N∗ N矩阵:它由数字 1,2,3, … … , N ∗ N 构成,且每⾏、每列及两条对⾓线上的数字之和都相同。

当 N为奇数时,我们可以通过以下⽅法构建⼀个幻⽅:⾸先将 1 写在第⼀⾏的中间。

之后,按如下⽅式从⼩到⼤依次填写每个数 K(K = 2,3, … , N ∗ N) :1. 若 (K − 1) 在第⼀⾏但不在最后⼀列,则将 K填在最后⼀⾏, (K− 1) 所在列的右⼀列;2. 若 (K − 1) 在最后⼀列但不在第⼀⾏,则将 K填在第⼀列, (K -1) 所在⾏的上⼀⾏;3. 若 (K − 1) 在第⼀⾏最后⼀列,则将 K填在 (K−1) 的正下⽅;4. 若 (K − 1) 既不在第⼀⾏,也不在最后⼀列,如果 (K− 1) 的右上⽅还未填数,则将K 填在(K − 1)的右上⽅,否则将 K 填在 (K− 1) 的正下⽅。

现给定 N,请按上述⽅法构造N*N 的幻⽅。

输⼊输⼊⽂件名为 magic.in。

输⼊⽂件只有⼀⾏,包含⼀个整数 N,即幻⽅的⼤⼩。

输出输出⽂件名为 magic.out。

输出⽂件包含 N ⾏,每⾏ N 个整数,即按上述⽅法构造出的 N∗ N 的幻⽅。

相邻两个整数之间⽤单个空格隔开。

样例输⼊3样例输出8 1 63 5 74 9 2提⽰对于 100% 的数据, 1 ≤ N≤ 39 且 N为奇数。

作者分析:这道题就是⼀道枚举题,⼀个⼀个去枚举数字,难度不⼤,但是这道题的重难点是格式,作者在刷这道题时格式错误两次,发现最后⼀⾏不能有换⾏,每⼀⾏末尾不能有空格,这就告诉⼤家⼀定要仔细观察样例输出(输⼊)。

#include <bits/stdc++.h>using namespace std;int main(){int n,k,x,y;cin >> n;int a[n+1][n+1];memset(a,0,sizeof(a));a[1][n/2+1] = 1; // 放置1for (int i = 2;i <= n * n;i++){for (int xx = 1;xx <= n;xx++){for (int yy = 1;yy <= n;yy++){if (a[xx][yy] == i - 1){x = xx;y = yy;break;}}}// 放置数字if (x == 1 && y != n){a[n][y+1] = i;}else if (y == n && x != 1){a[x - 1][1] = i;}else if (x == 1 && y == n){a[x + 1][n] = i;}else if (x != 1 && y != n){if (a[x - 1][y + 1] == 0){a[x-1][y+1] = i;}else{a[x+1][y] = i;}}}for (int i = 1;i <= n;i++){for (int j = 1;j <= n;j++){cout << a[i][j];if (j != n) cout << ""; // 千万注意}if (i != n) cout << endl;}return0;}。

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

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

一、实验目的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)若填充位置已有数字,则填充位置修改为下一行的同一位置。

幻方和幻圆数学问题

幻方和幻圆数学问题

幻方和幻圆数学问题一、幻方的奥秘你有没有听说过幻方?那玩意儿,看上去很神秘,好像是数学界的魔法,大家说它是“数字魔术”,说实话,它确实挺神奇的。

你想象一下,把一些数字按特定的规则排列起来,结果它们就能在每一行、每一列甚至两个对角线的总和都完全相等。

是不是很神奇?你说是不是就像一位魔术师挥舞着他的魔杖,数字们自己在阵列中跳跃,哐哐一声,就都齐了。

最常见的就是3x3的幻方。

我们把1到9这9个数字放在一个3x3的方格里,结果每行每列的和都必须是15。

难以置信吧?其实吧,这种幻方在历史上可是有悠久的故事的!早在中国古代,算卦的易经中就有类似的概念了。

它的魅力在于,不光是数值上的奇妙,它还能让你感觉到一种宇宙间的和谐,仿佛这个世界的一切都有一种隐藏的秩序。

你看看,那些复杂的排列就像星空中的星星,排列得整整齐齐。

别小看这些数字排列,它们其实能让你发现生活中的一些规律,甚至思考问题的时候灵感就像灵光一闪,突然闪现,啊,原来这些数字之间的关系这么深刻啊。

二、幻圆的奇妙之处讲完了幻方,我们再来聊聊幻圆。

你以为圆圈只是个简单的图形,错了,它在数学世界里也是个“宝藏”。

你想象一下,一个圆里面,各种数字和公式跳跃着,和圆心形成的距离一样远,看起来是不是有点像个大力士在比拼力气。

你把这些数值,跟它们在圆上位置的角度相结合,居然能形成一种和幻方一样的奇妙规律。

就拿“幻圆”这个词来说吧,它的意思就是,把一些数字按规律安排,结果这些数字分布在一个圆上,圆上的每个数字的加和,依然保持一致。

比如说,你可以把数字1、2、3、4、5、6,放在一个圆上,每隔一段距离放一个,然后你发现,不管怎么排,这些数字放上去后,它们之间的和总是巧妙地平衡。

听起来是不是就像是个数学的天文现象?圆圈,简简单单的一个形状,居然能藏着这么多的玄机。

你能不能想象,那些排列的数字好像是宇宙中的星星,它们看似随意地分布着,却又在某种力量的引导下悄悄地完成了一个神奇的平衡。

C++ 幻方

目录1 课题需求 (2)1.1 课题来源 (2)1.2 题目重述 (2)1.3 需求描述 (5)2 总体设计 (6)2.1.2 elseif 语句 (6)2.1.3 while语句 (6)2.1.4 for循环语句 (7)2.1.5 数组 (7)2.2 总体方案 (7)2.3 总体功能结构流程图 (8)3 详细设计和实现 (8)3.1 main函数阶段 (8)3.2 奇数阶幻方函数阶段 (10)3.3 单偶数阶幻方函数阶段 (13)3.3 双偶数阶幻方函数阶段 (16)4 测试与调试 (19)5 技能训练总结 (20)6 参考文献 (22)1 课题需求1.1 课题来源幻方起源于《易》,古称九宫(龟文),乃是我国最先发现的一个著名组合算题。

《易》算之于九宫,识之以天象,在古代天文、历法、农牧生产与社会生活中具有广泛的应用价值。

易十数为体,八九为用,八九不离十。

《易》九宫算动态组合模型(包括河图、洛书、八卦)是幻方的通解与最简模型随着数学的发展和科学技术水平的提高,人们逐渐发现幻方同现代数学的一些分支,如群论,组合分析等有关。

到了近代,幻方已经成为组合数学研究的一个有趣课题。

特别是从本世纪电子计算机出现之后,幻方已经在图论、程序设计、实验设计、对策论、概率统计、人工智能以及工艺美术等方面得到了广泛的应用。

1.2 题目重述所谓幻方,就是一个n行n列的正方形,共有2n个格子,将1、2、3...2n这些数字放到这些格子里,使其每行的和、每列的和及两条对角线的和都是一个相同的数S,S称为幻和。

值为2)1(2nn。

当n为奇数时,称为奇数阶幻方,当n为偶数时,称为偶阶幻方。

当n 可被4整除时,称方为双偶幻方。

当n不可被4整除时,称为单偶幻方。

多少年来,许多数学家都在研究这个古老而有趣的问题,试图找出一般的解法,但一般都是针对当n是奇数和n是4的倍数的情况。

奇数阶幻方的制作给出了两种方法。

第一种是连续摆数法。

首先,将1放在第一行中间一个格子里。

幻方问题[大全]

幻方问题[大全]第一篇:幻方问题[大全]幻方问题据说很早以前,夏禹治水时,河南洛阳附近的大河里浮出了一只乌龟,背上有一个很奇怪的图形,古人认为是一种祥瑞,预示着洪水将被夏禹王彻底制服。

后人称之为“洛书”或“河图”。

如果把图形改成现在通行的阿拉伯数字,就成了下图的样子。

2 5 71 6我们注意到左面的图形中,九个数字正好是从1到9,既无重复,也没有遗漏,所有横竖线与对角线之和相等。

此类图形成为幻方图形,图中给出的为三阶幻方。

选择合适算法,使用计算机生成不同阶的幻方。

解法分析:#include using namespace std;对平面魔方的构造,分为三种情况:N为奇数、N为4的倍数、N为其它偶数(4n+2的形式)⑴ N 为奇数时,最简单(1)将1放在第一行中间一列;(2)从2开始直到n×n止各数依次按下列规则存放,按45°方向行走,如向右上每一个数存放的行比前一个数的行数减1,列数加1(3)如果行列范围超出矩阵范围,则回绕。

(4)如果按上面规则确定的位置上已有数,或上一个数是第1行第n列时,则把下一个数放在上一个数的下面。

程序:int ABC1(int n)//当n为奇数的时候生成的幻方{int i,j,k;int **a=new int*[n];for(i=0;ifor(i=0;ifor(j=0;j}} j++;if(i==n-1&&j==n-1){ i++;a[i][j]=k;} if(i<0)i=n-1;if(j>n-1)j=0;if(a[i][j]==0)a[i][j]=k;else {} i++;if(i>n-1)i=0;j--;if(j<0)j=n-1;i++;if(i>n-1)i=0;a[i][j]=k;break;} for(i=0;i} for(j=0;j⑵ N为4的倍数时(采用对称元素交换法。

)首先把数1到n×n按从上至下,从左到右顺序填入矩阵然后将方阵的所有4×4子方阵中的两对角线上位置的数关于方阵中心作对称交换,即a(i,j)与a(n-1-i,n-1-j)交换,所有其它位置上的数不变。

c++任务书-幻方问题

软件设计基础(C++)课程设计任务书学院班级设计人 __ 成绩 ____一、题目:幻方问题二、目的与要求1.目的:(1)通过矩阵求和、转置和求列和的操作的程序设计,使学生更加系统地理解和掌握C++语言的数组和指针的应用等编程技巧,注意一维数组与二维数组的操作。

培养学生综合利用C++语言进行科学计算,使学生将所学知识转化为分析和设计简单实际问题的能力。

(2)提高学生建立程序文档、归纳总结的能力。

2.基本要求:(1)要求用C编程语言实现算法,完成程序的设计,在VC++6.0 开发环境运行算法;(2)培养上机动手能力,巩固分支结构和循环结构,掌握数组应用技巧;(3)在VC++6.0环境中,学会调试程序的方法,及时查究错误,独立调试完成;(4)源代码程序要求必要的注释。

3.创新要求在基本要求达到后,可以进行创新设计,如讨论各种排序算法的优劣。

4.书写设计报告的要求设计报告中包含以下几个方面:(1)设计题目(2)总体设计①用自顶而下或自底而上的方法,划分功能模块。

②确定各模块的算法(3)根据算法画出模块图(4)列出程序清单,并加以必要的注释(5)写出调试程序的方法(6)指出所设计问题的不足和改进方案(7)自评分三、设计方法和基本原理1.问题描述:n(n为奇数)阶幻方就是把整数1~n2排成n×n的方阵,使得每行元素之和与每列元素之和以及两条对角线上的元素之和都相等。

2.问题的解决方案:根据问题的描述,可以按照要求的功能采用结构化的设计思想。

问题的关键是要计算二维数组中每行与每列及对角线之和,确定起始位置与起始元素之值,并找出其排列规律。

四、主要技术问题的描述根据以上的分析,主要解决的技术问题在于:对二维数组元素进行逐一赋值,对数组下标临界值进行判断,并对是否二次赋值进行判断,从而决定数组元素的赋值情况。

五、课程设计时间:2011年5月10日至2011年7月10日六、课程设计的考核方式及评分方法1.考核方式课程设计结束时,在机房当场验收。

C语言实现魔方阵算法

C语言实现魔方阵算法魔方阵分为奇幻方和偶幻方,本文特意为大家收集整理了C语言实现魔方阵算法,希望大家喜欢!例如三阶魔方阵为:C语言实现魔方阵算法(幻方阵奇魔方单偶魔方实现)1魔方阵有什么的规律呢?魔方阵分为奇幻方和偶幻方。

而偶幻方又分为是4的倍数(如4,8,12……)和不是4的倍数(如6,10,14……)两种。

下面分别进行介绍。

2奇魔方的算法2.1奇魔方的规律与算法奇魔方(阶数n=2*m+1,m=1,2,3……)规律如下:数字1位于方阵中的第一行中间一列;数字a(1<a≤n2)所在行数比a-1行数少1,若a-1的行数为1,则a的行数为n;数字a(1<a≤n2)所在列数比a-1列数大1,若a-1的列数为n,则a的列数为1;如果a-1是n的倍数,则a(1<a≤n2)的行数比a-1行数大1,列数与a-1相同。

2.2奇魔方算法的C语言实现复制代码代码如下:#include<stdio.h>//Author:furzoom///N为魔方阶数#defineN11intmain(){inta[N][N];inti;intcol,row;col=(N-1)/2;row=0;a[row][col]=1;for(i=2;i<=N*N;i++){if((i-1)%N==0){row++;}else{//ifrow=0,thenrow=N-1,orrow=row-1 row--;row=(row+N)%N;//ifcol=N,thencol=0,orcol=col+1col++;col%=N;}a[row][col]=i;}for(row=0;row<N;row++){for(col=0;col<N;col++){printf("%6d",a[row][col]);}printf("n");}return0;}算法2:阶数n=4*m(m=1,2,3……)的偶魔方的规律如下:按数字从小到大,即1,2,3……n2顺序对魔方阵从左到右,从上到下进行填充;将魔方阵分成若干个4×4子方阵,将子方阵对角线上的元素取出;将取出的元素按从大到小的顺序依次填充到n×n方阵的空缺处。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

软件设计基础(C++
课程设计任务书
学院班级设计人 __ 成绩 ____
一、题目:幻方问题
二、目的与要求
1.目的:
(1通过矩阵求和、转置和求列和的操作的程序设计,使学生更加系统地理解和
掌握C++语言的数组和指针的应用等编程技巧,注意一维数组与二维数组的操作。

培养学生综合利用C++语言进行科学计算,使学生将所学知识转化为分析和设计简
单实际问题的能力。

(2提高学生建立程序文档、归纳总结的能力。

2.基本要求:
(1要求用C编程语言实现算法,完成程序的设计,在VC++6.0 开发环境运行算法;
(2培养上机动手能力,巩固分支结构和循环结构,掌握数组应用技巧;
(3在VC++6.0环境中,学会调试程序的方法,及时查究错误,独立调试完成;
(4源代码程序要求必要的注释。

3.创新要求
在基本要求达到后,可以进行创新设计,如讨论各种排序算法的优劣。

4.书写设计报告的要求
设计报告中包含以下几个方面:
(1设计题目
(2总体设计
①用自顶而下或自底而上的方法,划分功能模块。

②确定各模块的算法
(3根据算法画出模块图
(4列出程序清单,并加以必要的注释
(5写出调试程序的方法
(6指出所设计问题的不足和改进方案
(7自评分
三、设计方法和基本原理
1.问题描述:
n(n为奇数阶幻方就是把整数1~n2排成n×n的方阵,使得每行元素之和与每列元素之和以及两条对角线上的元素之和都相等。

2.问题的解决方案:
根据问题的描述,可以按照要求的功能采用结构化的设计思想。

问题的关键是要计算二维数组中每行与每列及对角线之和,确定起始位置与起始元素之值,并找
出其排列规律。

四、主要技术问题的描述
根据以上的分析,主要解决的技术问题在于:
对二维数组元素进行逐一赋值,对数组下标临界值进行判断,并对是否二次赋值进行判断,从而决定数组元素的赋值情况。

五、课程设计时间:2011年5月10日至2011年7月10日
六、课程设计的考核方式及评分方法
1.考核方式
课程设计结束时,在机房当场验收。

(1教师提供测试数据,检查运行结果是否正确。

(2回答教师提出的问题。

相关文档
最新文档