高级语言课程设计报告第二次报告:枚举的优化

 


实习题目


第二次报告: 枚举的优化

l 阅读群文件《程序设计导引及在线实践》8章枚举之8.1,8.2,8.4。

l 对于8.2题,可否继续改进?试用DevC++编写运行改进版程序,并描述你的改进算法,并贴上代码及注释。

l 完成ACM俱乐部作业:2015cup实习2枚举的优化

l 描述你的算法,注释你的程序。

l 注意勿抄袭:全系统自动判定抄袭,一旦抄袭,0分。

一、实习目的:深入学习枚举的优化

二、要求描述8.2,8.4题的解题算法对你的启发,8.2例题的算法有无可改进之处?描述你的改进算法,并贴上代码及注释。

启发:尽量减少计算量,增大每一次循环的跨度,从而减少循环次数;利用数学公式推导,使已知量的关系更加直接,避免每次的重复计算。

三、针对你的每一道题目:

1.算法描述。

直角三角形数量:通过对直角三角形的深度了解,可将其边的范围进一步缩小,进而减少计算量,比如最长的边的长度是周长的二分之一到三分之一之间,大大减小了计算量,而第二长的边必然大于其和最小边的和的二分之一,且小于最大边,减少了计算量。

0~9排列整除:直接通过for   if 的重复,一个一个的比并没有太大的计算量,直接通过了。

2.你的代码及注释。

8.2优化:

#include <stdio.h>

int main()

{

int p,e,i,d,j,no=1;

scanf("%d %d %d %d", &p, &e, &i, &d);

while(p!=-1 && e!=-1 && i!=-1 && d!=-1)

{

j=(33-(d+1-i)%33)+d+1;        /*不用循环,减少循环,同时将33前移先运算*/

for( ; j<21252; j=j+33)

if ((j-e)%28==0)

break;

for( ; j<21252; j=j+33*28)      /*33*28数值相对较大*/

if ((j-p)%23 == 0)

break;

printf("Case %d", no);

printf(": the next triple peak occurs in %d days.\n", j-d);

scanf("%d%d%d%d", &p, &e, &i, &d);

no++;

}

}

直角三角形数量

#include<stdio.h>

int main()

{

int t,A,a,b,c,n,i; //A为周长

scanf("%d",&t);

getchar();

while(t) //测试次数

{

n=0;

scanf("%d",&A);

for(c=(A/2);c>(A/3);c--) //最大边限制

{

for(b=((A-c)/2);b<c;b++) //第二边限制

{

a=A-b-c;

if(b*b+a*a==c*c&&a<b) //判断

{

n++;

}

}

}

printf("%d\n",n);

t--;

}

return 0;

}

0~9排列整除

#include <stdio.h>

int main()

{

int a,b,c,d,e,f,g,h,i,j,n=0;

for(a=0;a<10;a++) //每个都从零开始for

{

for(b=0;b<10;b++)

{

if(b==a) //分别与前一个比较

continue;

for(c=0;c<=9;c++)

{

if(c==a||c==b)

continue;

for(d=0;d<=9;d++)

{

if(d==a||d==b||d==c)

continue;

for(e=0;e<=9;e++)

{

if(e==a||e==b||e==c||e==d)

continue;

for(f=0;f<=9;f++)

{

if(f==a||f==b||f==c||f==d||f==e)

continue;

for(g=0;g<=9;g++)

{

if(g==a||g==b||g==c||g==d||g==e||g==f)

continue;

for(h=0;h<=9;h++)

{

if(h==a||h==b||h==c||h==d||h==e||h==f||h==g)

continue;

for(i=0;i<=9;i++)

{

if(i==a||i==b||i==c||i==d||i==e||i==f||i==g||i==h)

continue;

for(j=0;j<=9;j++)

{

if(j==a||j==b||j==c||j==d||j==e||j==f||j==g||j==h||j==i)

continue;

if((a*10000+b*1000+c*100+d*10+e)%(f*10000+g*1000+h*100+i*10+j)==0) //判断是否整除

n++;

}

}

}

}

}

}

  }

}

}

}

printf("%d",n);

return 0;

}

3. 设计及调试过程遇到的问题及解决方案。

 直角三角形数量

并不了解主要的优化方案,自己瞎想,始终想不出来怎么回事,无奈只好参考别人的思路,看了好几个都不太能理解,甚至看不懂为什么这样做,在看了几种思路后学会了其中好理解的几种,挑选最简易的编写。

0~9排列整除

毫无困难,顺着思路一次性编写成功。

  1. 心得体会和自我对程序的评价。

直角三角形数量

感觉自己的智商捉急啊,或许是不熟悉,或许就是想不到那种方法,不过我觉的还需要积累经验,看的多了,就会的多了。程序并不难,就是算法不好想。

0~9排列整除

没什么想说的就是以后可以用这样的方法编程。

时间: 2024-07-29 03:53:57

高级语言课程设计报告第二次报告:枚举的优化的相关文章

20155211课程设计个人结题报告

20155211课程设计个人结题报告 个人贡献 参与课设题目讨论及完成全过程 辅助调试代码 资料收集 撰写小组结题报告 实践过程中的问题及解决: 编译之后出现如下错误:..\OBJ\HZ.axf: error: L6050U: The code size of this image (47788 bytes) exceeds the maximum allowed for this version of the linker. 出现错误的原因是:没有完全破解. 解决办法是:按照D:\实验箱资料2

课程设计之第二次冲刺—(11.29-12.1总结)

经过了我们不懈的努力,终于把那个堆栈的问题给解决了,心实在是放下了一块大石头. 这个堆栈是填空中的问题,解决了这个问题,我们经过一系列的测试,发现该问题已经得以解决,算是做了一次单元测试. 解决了堆栈问题,进入到下一个单元,登录与注册,这个功能打算利用三到四个工作日来完成. 第二阶段,小组讨论,我们把第二阶段的主要代码都得以实现. 第三阶段主要是app的推广工作,与后续的工作的完善,与整体app的测试工作.

课程设计之第二次冲刺----第6天

讨论成员:罗凯旋.罗林杰.吴伟锋.黎文衷 完成内容:实现生成负数,而且带括号的四则运算题目

课程设计之第二次冲刺—(11.26-11.28总结)

这两三天我们开始对填空题这部分功能的内容写代码,我们写好了UI,还有填空题的计算, 获取用户答案,判断,当我们测试的时候发现了一个很大的问题,当计算填空题内容的时候,会 出现无限递归,然后堆栈溢出的问题,然后我们小组紧急开了一个会,我们在网上查了资料,也 觉得无法解决这部分的问题,而且我们发现如果这个问题没有解决的话,就会推翻前面的很多内容. 我们决定问教我们Android的李绍强老师,希望他能够帮我们解决.

课程设计之第二次冲刺----第三天

讨论成员:罗凯旋.罗林杰.吴伟锋.黎文衷 讨论内容:核心功能的扩展,除了核心功能以外还有没有其他的扩展功能.功能的用户体验如何,能不能实现.比如答对题目会播放音乐等.

课程设计之第二次冲刺----第五天

讨论成员:罗凯旋.罗林杰.吴伟锋.黎文衷 完成内容:完成了一个可能用到的倒计时的功能.

RocEDU.课程设计2018 第二周进展 博客补交

本周计划完成的任务 (1).将开发板和平板电脑及其相关配件连通,并和电脑连接. (2).将代码的运行设备从安卓模拟器改为试验箱的平板电脑,平板电脑上实现软件. 本周实际完成情况 (1).计划完成的第一步全部完成,成果如下图所示: (2).已将平板电脑成功接入电脑,并在运行代码的同时,切换运行设备. 本周遇到的问题与解决过程 我们还遇到了平板电脑连接不上网的问题,于是我们找到秦老师询问,最终收到了无限网卡解决了这个问题.有了网卡就可以连接wifi了. 在运行代码的时候,出现Application

课程设计第二十四天,09.11

1.今日完成: (1)完善代码,除了订餐页面不同菜品照片的设置(应该在.js里定义一个图片数组即可),其他已经基本完成,个人中心页面也基本完成: (2)课程设计的结课报告还在赶工中,预计明天上午能够完成,并且已经完成今天的gitlab上传: 2.明日计划: (1)首先完善订餐页面的菜品图部分,准备下午的项目演示. (2)再提交最后版本的代码到gitlab,截至到项目演示前的最新版本. (3)争取完成课程设计的结课报告. 3.今日总结: (1)完善了部分代码,也只不过是优化了而已,代码框架没有大改

第二次课程设计实验报告

2019春第二次课程设计实验报告 一.实验项目名称 贪吃蛇小游戏 二.实验项目功能描述 玩家通过键盘控制蛇在地图上寻找食物,蛇吃下食物,可以加分,碰到四壁或者自己游戏结束. 三.项目模块结构介绍 程序关键在于表示蛇的图形及蛇的移动.用一个小圆点来表示蛇的一节身体,身体每长一节,增加一个圆点,蛇头用四节来表示.移动时必须从蛇头开始,所以蛇不能向相反的大反向移动,如果不按任意键,蛇自行在当前方向上前移,如果按与蛇方向相反的方向键,此游戏就会暂停,再按向前的方向键才能继续游戏,但按下有效方向键后,蛇头