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的更多相关文章

  1. 阅读摘录《javascript 高级程序设计》01

    前言: 因为工作需要,所以开始主攻前台JS方面的技术.在以前的工作中,使用过这门脚本语言.但是都是比较凌乱的,用到什么学什么,只是为了实现业务,而去使用. 不会考虑到代码优化,封装对象等.今次特意借了 ...

  2. javascript高级程序设计--笔记01

    概述 JavaScript的实现包含三个部分: 1  核心(ECMAScript)   提供核心语言功能 2  文档对象模型(DOM)  一套提供了访问以及操作网页内容的API 3  浏览器对象模型( ...

  3. 标准C程序设计七---01

    Linux应用             编程深入            语言编程 标准C程序设计七---经典C11程序设计    以下内容为阅读:    <标准C程序设计>(第7版) 作者 ...

  4. 现代程序设计homework——04

    题目: 详见:http://www.cnblogs.com/xinz/p/3341551.html 题目本身确实很难,“很难想到一个比较优雅的算法”,这是一个老师请来专门讲解这道题的大牛的原话.确实, ...

  5. Using Vertex Texture Displacement for Realistic Water Rendering

    http://blog.csdn.net/soilwork/article/details/709869 Using Vertex Texture Displacement for Realistic ...

  6. 软工+C(9): 助教指南,持续更新...

    上一篇:提问与回复 下一篇:从命令行开始逐步培养编程能力(Java) 目录: ** 0x00 Handshake ** 0x01 点评 ** 0x02 评分 ** 0x03 知识储备 ** 0x04 ...

  7. 20145218 《Java程序设计》第01次实验报告

    北京电子科技学院(BESTI)实验报告 课程:Java程序设计 班级:1452 指导教师:娄嘉鹏 实验日期:2016.04.08 实验名称:Java开发环境的熟悉(Linux + Eclipse) 实 ...

  8. 01 C语言程序设计--01 C语言基础--第1章 C语言概述&第2章 GCC和GDB

    走进嵌入式开发的世界,企业级项目课程让你达到企业嵌入式应用开发要求.名师在线答疑,解决疑难.科学评测体系,系统评估学习.核心项目实........ 30 门课程 241小时12分钟 824 人学习 学 ...

  9. 20145219 《Java程序设计》第01周学习总结

    20145219 <Java程序设计>第01周学习总结 教材学习内容总结 软件分类:系统软件(DOS.Windows.Linux等).应用软件(扫雷.QQ等) 人机交互方式:图形化界面.命 ...

  10. HDU 6113 度度熊的01世界 【DFS】(2017"百度之星"程序设计大赛 - 初赛(A))

    度度熊的01世界 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Su ...

随机推荐

  1. java Tomcat数据库连接池

    1. 在tomcat服务器目录下面的conf中找到一个叫Context.xml的配置文件,在其中加入以下代码 <Resource name="jdbc/books"  aut ...

  2. SDUT 2527 斗地主

    http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2527 思路 :以前的结训比赛,当时不会做,比完 ...

  3. ADT(android-bundler) HTML EDIT 编辑 xml HTML

    逗比的ADT,安装个html一直不成功,最后发现了如下方法 Helper_Install New Software_ http://download.eclipse.org/releases/indi ...

  4. Android 控制ScrollView滚动到底部

    scrollView.fullScroll(ScrollView.FOCUS_DOWN);滚动到底部 scrollView.fullScroll(ScrollView.FOCUS_UP);滚动到顶部 ...

  5. [itint5]直角路线遍历棋盘

    http://www.itint5.com/oj/#22 这题一开始直接用暴力的DFS来做,果然到25的规模就挂了. vector<bool> visited(50, false); ve ...

  6. 【mysql的设计与优化专题(4)】表的垂直拆分和水平拆分

    垂直拆分 垂直拆分是指数据表列的拆分,把一张列比较多的表拆分为多张表 通常我们按以下原则进行垂直拆分: 把不常用的字段单独放在一张表; 把text,blob等大字段拆分出来放在附表中; 经常组合查询的 ...

  7. Qt: 内建对话框(各种对话框都有了,且用到了qobject_cast解析sender的技术)

    #include "BuiltinDialog.h" #include <QtGui/QTextEdit> #include <QtGui/QPushButton ...

  8. ArcGIS学习记录—ArcGIS ArcMap编辑状态中线打断的问题

    摘要:在处理数据时,我们经常会遇到线打断的问题,比如需要指定在线上某处打断线,或者新建网络数据集时需要在线的交点处打段线等等.现将桌面版中我所遇到的线打断的工具总结如下: 在ArcGIS矢量处理数据时 ...

  9. JVM运行机制

    JVM启动流程

  10. 在NPAPI开发火狐浏览器插件在NPAPI插件

    1.插件是什么 插件是一种遵循一定规范的应用程序接口编写出来的程序.插件必须依附于一个宿主程序,为宿主程序提供增强功能.插件的种类有很多,这里主要讨论浏览器插件. IE下利用OLE和COM技术开发的浏 ...