西安邮电大学(计算机学院)课内实验报告实验名称:贪心算法专业名称:班级:学生姓名:学号(8位):指导教师:实验日期:一.实验目的及实验环境1.练习掌握最有分解问题的规划设计与实现;2.熟练掌握递归算法的设计及应用,怎样才能使算法的空间复杂度和时间复杂度最低;基于Linux系统下的ubuntu或其他的编辑器二.实验内容1.设n是一个正整数,现在要求将n分解为若干互不相同的自然数的和,且使这些自然数的乘积最大三.方案设计1.先将这个数分解成以2开始的连续的若干因子,它们的和加起来是n,将此数在后项优先的方式下均匀地分给前面各项。保证正整数所分解出的因子之差的绝对值最小,即|a–b|最小,可以保证分解乘积越大。四.测试数据及运行结果1.正常测试数据(3组)及运行结果;A.2.非正常测试数据(2组)及运行结果A.B.五.总结1.实验过程中遇到的问题及解决办法;在实验过程中错误不断地出现,我认真地查阅书籍,研究课本上例题,并且在同学的帮助下纠正了自己的错误,得出了正确的结果。2.对设计及调试过程的心得体会。在程序的运行与调试过程中出现了很多错误,但是通过自己复习课本知识、查询资料等,修改后得出了正确的结果。而且我觉得自己一定要敢于尝试,即使没有结果但是勇于实践就会有意想不到的收获。所以在以后的学习中我觉得我们一定要集中精力、端正自己态度,提高自己的成绩。当然我也认识到了自己的薄弱之处,因此我一定争取做的能让自己满意,做的更好。六.附录:源代码(电子版)#includestdio.h#includestdlib.hvoidopen_file(intn){FILE*fp;if((fp=fopen(input.txt,wt))==NULL){printf(thefilewritefailed.\n);exit(1);}fprintf(fp,%2d\n,n);fclose(fp);}voidsave_file(intsum){FILE*fp;if((fp=fopen(output.txt,wt))==NULL){printf(thefilesavefailed!.\n);exit(1);}fprintf(fp,%2d\n,sum);fclose(fp);if((fp=fopen(output.txt,r))==NULL){printf(savefilefailed!\n);exit(1);}fscanf(fp,%2d,&sum);printf(\n?d\n,sum);fclose(fp);}intMAX(intn){inti=2,j=0,data[n],sum=0,max=1;intlenth;while(sum+i=n){sum+=i;data[j]=i;i++;j++;}lenth=j;i=n-sum;while(i0){if(j=0){data[j+i]+=1;i--;j--;}else{data[j-1]+=1;i--;j--;}}for(i=0;ilenth;i++)max*=data[i];returnmax;}intmain(){intn,max;srand((unsigned)time(NULL));n=rand()%100;open_file(n);printf(杩欎釜鏁版槸%d:\n,n);max=MAX(n);save_file(max);return0;}