现代程序设计——homework-01
1、我的GitHub用户
首先,接触到现代程序设计这门课之后我才正式开始使用GitHub和它的客户端,以前都是去网站看代码、扒样例。我注册的账户名为:hennande。目前该账户中有我的第一份关于homework-01的代码和记录。
2、我的教科书
代码大全 (第二版) 斯蒂夫·迈克康奈尔。(这本书又是一时半会儿看不完的节奏啊!……!)
3、最大连续子数组问题
我的思路:
假设一个数组的最大连续子数组已知,那么这个连续子数组会具有什么特点呢?
首先,与之首尾相连的元素如果存在,一定是大于等于零的;其次,与之数位相连的子数组如果存在,那么该子数组的和一定是小于等于零的。暂时不考虑存在两个极大连续子数组和相等的情况而产生的优先解判定问题,那么只需从数组的开始进行扫描,每新扫描一个元素就对它以及它之前的子数组是否就有最大连续子数组的特性进行判断,同时对最大值和起始终止位标示进行调整,直到扫描结束即可得到问题的解。
我的源码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a[],tempsub,maxsub,i,n;
printf("array length=");
scanf("%d",&n);
tempsub=maxsub=;
for(i=;i<n;i++)
{
scanf("%d",&a[i]);
tempsub+=a[i];
if(tempsub<)
tempsub=;
if(tempsub>maxsub)
maxsub=tempsub;
}
printf("%d\n",maxsub);
return ;
}
我的结果:

我的分析:
如果以加法操作作为计算复杂度的操作单位,我的算法最多进行n次加法操作,属于O(n)复杂度的算法,基本接近正确方法。研究完答案的代码,发现像答案那样写动态规划的思想更明显,而我自己的做法更像是“投机取巧”。
更改后的版本:
修改源码:
#include <stdio.h>
#include <stdlib.h> int main()
{
int a[],tempsub,minsub,maxsub,i,n;
printf("array length=");
scanf("%d",&n);
tempsub=;
//to get the minimum maxsub, find the minimum subarray;
for(i=;i<n;i++)
{
scanf("%d",&a[i]);
if(i==)
minsub=a[];
if(minsub>a[i])
minsub=a[i];
}
maxsub=minsub;
for(i=;i<n;i++)
{
if(tempsub+a[i]>a[i])
tempsub=tempsub+a[i];
else
tempsub=a[i];
if(tempsub>maxsub)
maxsub=tempsub;
}
printf("%d\n",maxsub);
return ;
}
错误原因:
当时写第一个算法的时候就有一种“投机取巧”的感觉,也没有进行仔细的测试就贴了出来,研究完GitHub的使用之后才发现,我的第一个方法原来不适合于最大子数组和为负的情况,当然,看过正确的方法之后,加之修改了一通之后,确实意识到了错误的根源,也就老老实实用动归了。
我的感想:
不得不说,没有进行过相关的程序设计训练的人,对于程序的测试还是很缺少感觉的。做出来的测试点也不具有广泛的代表性,需要提高相关的思维能力。
现代程序设计——homework-01的更多相关文章
- 阅读摘录《javascript 高级程序设计》01
前言: 因为工作需要,所以开始主攻前台JS方面的技术.在以前的工作中,使用过这门脚本语言.但是都是比较凌乱的,用到什么学什么,只是为了实现业务,而去使用. 不会考虑到代码优化,封装对象等.今次特意借了 ...
- javascript高级程序设计--笔记01
概述 JavaScript的实现包含三个部分: 1 核心(ECMAScript) 提供核心语言功能 2 文档对象模型(DOM) 一套提供了访问以及操作网页内容的API 3 浏览器对象模型( ...
- 标准C程序设计七---01
Linux应用 编程深入 语言编程 标准C程序设计七---经典C11程序设计 以下内容为阅读: <标准C程序设计>(第7版) 作者 ...
- 现代程序设计homework——04
题目: 详见:http://www.cnblogs.com/xinz/p/3341551.html 题目本身确实很难,“很难想到一个比较优雅的算法”,这是一个老师请来专门讲解这道题的大牛的原话.确实, ...
- Using Vertex Texture Displacement for Realistic Water Rendering
http://blog.csdn.net/soilwork/article/details/709869 Using Vertex Texture Displacement for Realistic ...
- 软工+C(9): 助教指南,持续更新...
上一篇:提问与回复 下一篇:从命令行开始逐步培养编程能力(Java) 目录: ** 0x00 Handshake ** 0x01 点评 ** 0x02 评分 ** 0x03 知识储备 ** 0x04 ...
- 20145218 《Java程序设计》第01次实验报告
北京电子科技学院(BESTI)实验报告 课程:Java程序设计 班级:1452 指导教师:娄嘉鹏 实验日期:2016.04.08 实验名称:Java开发环境的熟悉(Linux + Eclipse) 实 ...
- 01 C语言程序设计--01 C语言基础--第1章 C语言概述&第2章 GCC和GDB
走进嵌入式开发的世界,企业级项目课程让你达到企业嵌入式应用开发要求.名师在线答疑,解决疑难.科学评测体系,系统评估学习.核心项目实........ 30 门课程 241小时12分钟 824 人学习 学 ...
- 20145219 《Java程序设计》第01周学习总结
20145219 <Java程序设计>第01周学习总结 教材学习内容总结 软件分类:系统软件(DOS.Windows.Linux等).应用软件(扫雷.QQ等) 人机交互方式:图形化界面.命 ...
- HDU 6113 度度熊的01世界 【DFS】(2017"百度之星"程序设计大赛 - 初赛(A))
度度熊的01世界 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
随机推荐
- c++调用matlab生成的Dll动态连接库
点击打开链接http://download.csdn.net/detail/nuptboyzhb/4228429 c++调用matlab生成的Dll动态连接库 实验平台: matlab 7.0(R ...
- 【mysql的设计与优化专题(1)】ER图,数据建模与数据字典
需求分析是做项目中的极为重要的一环,而作为整个项目中的'血液'--数据,更是重中之重.viso,workbench,phpmyadmin等软件可以帮我们更好的处理数据分析问题. ER图 E-R方法是& ...
- WPF之小动画三
如果前两篇的博客太为普通,那么接下来的内容将让你动画实在是太厉害了.本文将会介绍两个关于纯手工实现动画的形式,当然动画效果就不用我多说了. 基于帧的动画: 此处的帧并不是之前介绍的Animation这 ...
- *MySQL卸载之后无法重装,卡在Apply security settings:Error Nr.1045
- Linux信号列表
我们运行如下命令,可看到Linux支持的信号列表: ~$ kill -l1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL5) SIGTRAP 6) SIGABRT 7) ...
- android系统平台显示驱动开发简要:LCD常用接口篇『二』
平台信息:内核:linux3.4.39系统:android4.4 平台:S5P4418(cortex a9) 作者:瘋耔(欢迎转载,请注明作者) 欢迎指正错误,共同学习.共同进步!! 关注博主新浪博客 ...
- git rev-list
git-rev-list - Lists commit objects in reverse chronological order 按照时间顺序倒序排列的commit Update: If all ...
- 根据block取出space_id
/*********************************************************************//** Gets the space id of a bl ...
- JAVA并行框架学习之ForkJoin
当硬件处理能力不能按照摩尔定律垂直发展的时候,选择了水平发展,多核处理器已经广泛应用.未来随着技术的进一步发展,可能出现成百上千个处理核心,但现有的程序运行在多核心处理器上并不能得到较大性能的提升,主 ...
- [原]Unity3D深入浅出 - 物理引擎之碰撞体(Colliders)
通常Colliders会与Rigidbody一起使用,没有添加碰撞体的刚体会彼此相互穿过. 常用碰撞体有以下几种: Box Collider:盒子碰撞体,是一个立方体外形的碰撞体,可调整为不同大小的长 ...