你永远不会独行

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& height)
{
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 往后的学习难度会继续增大,走好每一步打好基础及其重要

posted @ 2020-11-08 00:01  mane  阅读(113)  评论(4编辑  收藏  举报