数学软件作业.docx
- 文档编号:6763703
- 上传时间:2023-01-10
- 格式:DOCX
- 页数:11
- 大小:138.05KB
数学软件作业.docx
《数学软件作业.docx》由会员分享,可在线阅读,更多相关《数学软件作业.docx(11页珍藏版)》请在冰豆网上搜索。
数学软件作业
数学软件
(2)课程设计
班级:
学生姓名:
学号:
日期:
得分:
评语:
问题1:
sudoku生成与求解
目录
一、程序分析与设计1
二、流程图1
三、源程序清单1
四、调试过程2
五、程序有待改进的地方2
六、本次编程的收获和建议2
七、编程结果截屏3
一、程序分析与设计
(标题四号宋体加黑,正文五号宋体,行间距-固定值18,首行缩进2字符)
数独游戏来自日文,但概念源自“拉丁方块”,游戏规则很简单:
一个9*9的大棋盘按九宫格的方划分成9个3*3的小棋盘,棋盘上已经填写了1到9若干个数字,每行以及每列以及每宫填的数字没有重复。
对于难度的控制主要是由两个条件组合来控制的。
a.空格可以添入的数的个数(即空格的自由度)
b.空的格子的总数。
我们可以写三个bool函数来控制每行每列和每个小九宫格填的数字都没有重复,再利用一个FillNum()函数来填九宫格,主要利用了三个do~while循环和两个for循环来控制使得每行每列和每个小九宫格填的数字没有出现重复再写一个函数Initialize()来初始化九宫格,用Print()函数来显示已经完成的九宫格数组。
主要是更好的掌握for循环和if条件语句。
尤其在写boolIsExistInCube(intc,intr,intnum)函数时,需要把它分成九个小九宫格来写,更加体现了if条件语句的重要性。
二、流程图
作用
判断每一列1到9都出现
IsExistInRow()函数
作用
判断每一行1到9都出现
IsExistInColumn()函数
作用
IsExistInCube()函数
判断每一个小九宫格1到9都出现
作用
调用
填充数组
FillNum()函数
显示数组
作用
Print()函数
作用
初始化数组
Initialize()函数
main()函数
三、源程序清单
(此部分采用小五号宋体,行间距-固定值14)
#include
#include
usingnamespacestd;
constintNUM=9;
intcube[NUM][NUM];
boolIsExistInRow(intr,intnum)
{
for(intj=0;j { if(cube[r][j]==num) returntrue; } returnfalse; } boolIsExistInColumn(intc,intnum) { for(inti=0;i { if(cube[i][c]==num) returntrue; } returnfalse; } boolIsExistInCube(intc,intr,intnum) { if(c { if(r { for(inti=0;i { for(intj=0;j if(cube[i][j]==num) returntrue; } } if(r>NUM/3&&r<2*NUM/3) { for(inti=0;i { for(intj=NUM/3;j<2*NUM/3;j++) if(cube[i][j]==num) returntrue; } } if(r>2*NUM/3) { for(inti=0;i { for(intj=2*NUM/3;j if(cube[i][j]==num) returntrue; } } } if(c>NUM/3&&c<2*NUM/3) { if(r { for(inti=NUM/3;i<2*NUM/3;i++) { for(intj=0;j if(cube[i][j]==num) returntrue; } } if(r>NUM/3&&r<2*NUM/3) { for(inti=NUM/3;i<2*NUM/3;i++) { for(intj=NUM/3;j<2*NUM/3;j++) if(cube[i][j]==num) returntrue; } } if(r>2*NUM/3) { for(inti=NUM/3;i<2*NUM/3;i++) { for(intj=2*NUM/3;j if(cube[i][j]==num) returntrue; } } } if(c>2*NUM/3) { if(r { for(inti=2*NUM/3;i { for(intj=0;j if(cube[i][j]==num) returntrue; } } if(r>NUM/3&&r<2*NUM/3) { for(inti=2*NUM/3;i { for(intj=NUM/3;j<2*NUM/3;j++) if(cube[i][j]==num) returntrue; } } if(r>2*NUM/3) { for(inti=2*NUM/3;i { for(intj=2*NUM/3;j if(cube[i][j]==num) returntrue; } } } returnfalse; } intFillNum() { inti,j,n; srand((unsigned)time(NULL)); n=1+rand()%NUM; for(i=0;i { for(j=0;j { do { do { do { if(n>=NUM) n=0; n=n+1; }while(IsExistInCube(i,j,n)); }while(IsExistInRow(i,n)); }while(IsExistInColumn(j,n)); cube[i][j]=n; } } return0; } voidInitialize() { for(inti=0;i { for(intj=0;j { cube[i][j]=0; } } } voidPrint() { for(inti=0;i { for(intj=0;j { cout< } cout< } } intmain() { Initialize(); FillNum(); Print(); return0; } 四、调试过程 程序中要求出始数组只能是零数组;对于初始数组不是零的则会出现运行错误,这有很大的不足,开始想在代码实现难度的区分,但是还是比较困难。 最后只能用循环和函数的调用实现初始数组为零,自动生成的数独了。 5、程序有待改进的地方 本程序是随机生成数独代码,具有随机性,虽然产生完美的数独,但是要求初始数独是0;如果是已经给出的部分数独,要求你补充完整,则运行时会出现错误,今后的学习中,则需要改进。 继续学习写出更加完美的数独。 而且程序代码中没有体现难度的区分。 这是它的不足。 还有老师要求的是用数学软件做的,可是最后只能用c++做,结果不是很好。 由于时间关系只能写这么多了,实在是能力有限,想不出来。 六、本次编程的收获和建议 明白了函数调用,和bool的用法,还有如何初始化数组,如何更好的利用do~while循环,while的条件是一个bool函数的判定类型,更好掌握了for循环还有do~while循环的应用,还有函数的调用。 七、编程结果截屏
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数学 软件 作业