C语言I博客作业03
作业所属课程 | https://edu.cnblogs.com/campus/zswxy/CST2020-4 |
---|---|
作业要求 | https://edu.cnblogs.com/campus/zswxy/CST2020-4/homework/11455 |
这个作业的目标 | <掌握for循环结构> |
学号 | <20209068> |
第一部分 PTA实验作业
1.1题目一
要求读入1个整数X,然后输出1+2+3+...X 的和
1.1.1实验代码截图
1.1.2 数据处理
定义了i,sum,x三个变量,三者都属于整数型
数据用到了for的循环结构
1.1.3PTA提交列表及说明
Q1: 用从1加到100的原题目作为模板完成此题目,答案显示错误
A1:弄清x在程序中的作用,转换思路进行更改
Q2: printf("1+...+%d=%d",sum);
A2: printf("1+...+%d=%d",x,sum);
1.2题目二
本题要求编写程序,计算平方根序列√1+√2+√3+⋯的前N项之和。可包含头文件math.h,并调用sqrt函数求平方根
1.2.1实验代码截图
1.2.2数据处理
定义了sum,i,n三个变量,其中sum是浮点型,i和n是整数型
同样调用了for的循环语句,还调用了函数sqrt
1.2.3PTA提交列表及说明
Q1:不明白是将头文件直接替换还是增加头文件math.h
A1:增加头文件math.h
Q2: 对于函数sqrt不知道怎么用
A2:sum=sum+sqrt(i);
1.3题目三
据说汪星人的智力能达到人类 4 岁儿童的水平,更有些聪明汪会做加法计算。比如你在地上放两堆小球,分别有 1 只球和 2 只球,聪明汪就会用“汪!汪!汪!”表示 1 加 2 的结果是 3。
本题要求你为电子宠物汪做一个模拟程序,根据电子眼识别出的两堆小球的个数,计算出和,并且用汪星人的叫声给出答案。
1.3.1实验代码截图
1.3.2数据处理
定义了A,B,i,a四个变量,都属于整数型
运用了for的循环语句,在for中加入printf("wang!")以表达题意
1.3.3PTA提交列表及说明
Q1:大体思路与前面两题相差不大,主要是对于wang!的表达不太理解
A1:直接在for的循环语句中加入
Q2:return 0;之前还要加入一个printf("n/"),对此并不理解
A2:对之前程序的一次总表达
第二部分 阅读代码
题目:给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。
示例
方法
直观想法
直接按问题描述进行。对于数组中的每个元素,我们找出下雨后水能达到的最高位置,等于两边最大高度的较小值减去当前高度的值。
算法
初始化 ans=0ans=0ans=0
从左向右扫描数组:
初始化 max_left=0\text{max\_left}=0max_left=0 和 max_right=0\text{max\_right}=0max_right=0
从当前元素向左扫描并更新:
max_left=max(max_left,height[j])\text{max\_left}=\max(\text{max\_left},\text{height}[j])max_left=max(max_left,height[j])
从当前元素向右扫描并更新:
max_right=max(max_right,height[j])\text{max\_right}=\max(\text{max\_right},\text{height}[j])max_right=max(max_right,height[j])
将min(max_left,max_right)−height[i]\min(\text{max\_left},\text{max\_right}) - \text{height}[i]min(max_left,max_right)−height[i] 累加到 ans\text{ans}ans
int trap(vector
{
int ans = 0;
int size = height.size();
for (int i = 1; i < size - 1; i++) {
int max_left = 0, max_right = 0;
for (int j = i; j >= 0; j--) { //Search the left part for max bar size
max_left = max(max_left, height[j]);
}
for (int j = i; j < size; j++) { //Search the right part for max bar size
max_right = max(max_right, height[j]);
}
ans += min(max_left, max_right) - height[i];
}
return ans;
}
复杂性分析
时间复杂度: O(n2)O(n^2)O(n2)。数组中的每个元素都需要向左向右扫描。
空间复杂度 O(1)O(1)O(1) 的额外空间。
作者:LeetCode
链接:https://leetcode-cn.com/problems/trapping-rain-water/solution/jie-yu-shui-by-leetcode/
来源:力扣(LeetCode)
收获
1 与本周教学内容想契合,同样运用了for的循环语句
2 解题思路大概可以理解,重要的是将解题思路用正确的代码表达
3 解法中运用了一中扫描并更新的算法,层层递进,尽管显得暴力,但是可以保证不出差错
我的想法
我的思路取自于木桶效应,即所能承受水的容量取决于最低木板的高度,当仔细思考后发现我这种思路无法用于此题。
在看了正确的解题思路后也意识到逻辑思维能力的重要性
第三部分 学习总结
3.1学习进度条
周/日期 | 这周所花的时间 | 代码行 | 学到的知识点简介 | 目前比较迷惑的问题 |
---|---|---|---|---|
10/12——10/18 | 15h | 218 | 大致了解了c语言,运用C语言编写最基本的程序 | 不太了解头文件是什么 |
10/19——10/23 | 17h | 260 | 了解断点的相关操作,并掌握此方法来检查代码 | 有时候会出现无法进入逐一调试功能 |
10/24——11/7 | 50h | 400 | 学会运用for的循环结构,进一步了解各种字符 | 还并不能熟练运用for循环结构 |
3.2累积代码行和博客字数
3.3学习感悟
1 本周的学习相比之前难度有所增大,代码复杂度明显提高
2 往后的学习难度会继续增大,走好每一步打好基础及其重要