C语言I博客作业03

这个作业属于哪个课程 https://edu.cnblogs.com/campus/zswxy/CST2020-4
这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/CST2020-4/homework/11455
这个作业的目标 熟练掌握for循环语句,并且完成相应的pta的作业
学号 20209043
1.PTA实验作业

1.1求简单交错序列前N项和
本题要求编写程序,计算序列 1 - 1/4 + 1/7 - 1/10 + ... 的前N项之和。
1.1.1实验代码截图

1.1.2数据处理
| 数据表达:定义了三个整形变量i,N,y。还有一个浮点变量s。 |
| ------------------------------ | ------ |
| 数据处理:调用了scanf(),printf(),for语句。 |
1.1.3 PTA提交列表及说明

Q1.刚开始写的时候忘记在前面使用函数说明的交代,在后面直接使用了pow函数。
A2.检查发现函数说明忘记写了,在任何时候使用函数前都必须说明,不要有惯性思维。
Q2. 提交之后显示格式不对。
A2. 自习读题发现必须用“s"来表达。

1.2for循环练习:1到X的累加和,并按指定格式输出。
要求读入1个整数X,然后输出1+2+3+...X 的和。
1.2.1 实验代码截图

1.2.2 数据处理
| 数据表达:定义了三个整形变量i,N,sum。 |
| ------------------------------ | ------ |
| 数据处理:调用了scanf(),printf(),for语句。一些常用语句 |
1.2.3 PTA提交列表及说明

Q1.开始怀着必对信心提交,结果给我整了一个格式错误。
A1.进行运行发现也是对的,完全正确。问了同学之后才知道错哪里。

1.3 本题要求编写程序,计算平方根序列√1​​+√​2+√​3+⋯的前N项之和。可包含头文件math.h,并调用sqrt函数求平方根。
1.3.1 实验代码截图

1.3.2 数据处理
| 数据表达:定义了二个整形变量i,N,和一个浮点整型sum。 |
| ------------------------------ | ------ |
| 数据处理:调用了scanf(),printf(),for语句。一些常用语句来进行 |
1.3.3 PTA提交列表及说明

Q1.遇到一个新函数不会用。
A1.用百度搜索之后才发现和pow函数一样,没有没用多大的有区别。
Q2.pat提交的时候出现了内部错误这个新错误。
A2.提交之后正确之后才发现这样也能影响代码的内部完整度,再pta上写代码的要求比一些软件都高。
2.阅读代码
找一份优秀代码,理解代码功能,并讲出你所选代码有点及可以学习的地方。

#include <cstring>
#include <algorithm>
#define MX 55555
#define lson l,m,n<<1
#define rson m+1,r,n<<1|1
#define lc n<<1
#define rc n<<1|1
using namespace std;
int num[MX], ma[MX << 2], mi[MX << 2];
int L, R, N, ans;
inline void up(int n)
{
    ma[n] = num[ma[lc]] > num[ma[rc]] ? ma[lc] : ma[rc];
    mi[n] = num[mi[lc]] < num[mi[rc]] ? mi[lc] : mi[rc];
}
void B(int l = 1, int r = N, int n = 1)
{
    if (l == r)
    {
        scanf("%d", &num[l]);
        ma[n] = mi[n] = l;
        return;
    }
    int m = l + r >> 1;
    B(lson), B(rson), up(n);
}
int QA(int l = 1, int r = N, int n = 1)
{
    if (L <= l && r <= R)
        return ma[n];
    int ans = 0, m = l + r >> 1, t;
    if (L <= m)
        t = QA(lson), ans = (num[ans] > num[t]) ? ans : t;
    if (m < R)
        t = QA(rson), ans = (num[ans] > num[t]) ? ans : t;
    return ans;
}
int QB(int l = 1, int r = N, int n = 1)
{
    if (L <= l && r <= R)
        return mi[n];
    int ans = N + 1, m = l + r >> 1, t;
    if (L <= m)
        t = QB(lson), ans = (num[ans] < num[t]) ? ans : t;
    if (m < R)
        t = QB(rson), ans = (num[ans] < num[t]) ? ans : t;
    return ans;
}
int S(int l, int r)
{
    if (l >= r) return -1;
    L = l, R = r;
    int ans = -1, a = QA(), b = QB();
    if (a > b)
        ans = max(a - b, max(S(l, b), S(a, r)));
    else ans = max(S(a + 1, b - 1), max(S(l, a), S(b, r)));
    return ans;
}
int main()
{
    while (~scanf("%d", &N))
    {
        B(), num[N + 1] = 111111;
        printf("%d\n", S(1, N));
    }
    return 0;
}

运用了多种函数,这些函数在以后我们一定要学会怎么使用,说实话acm上面的题我真的在现在看不懂,但是从表面上看我只能从大概的来看,if,int,scanf,printf,while等等这些混合起来一起使用,需要慢慢练。

3.学习总结
| 周/日期 这周所花的时间 代码行学到的知识点 简介目前比较迷惑的问题 |
| ------------------------------ | ------ |
| 11/1—11/8 一周 398 数据控制输出 |
3.2 累积代码行和博客字数

3.3 学习感悟
在这周里我经历计算机学者的熬夜,这滋味真的不好说,比以前玩游戏累很多,玩游戏不需要动脑,而写博客园,pta就不一样了,有时间也不一定有结果,的动脑。不过在学习的时候中发现,自己会一点小技巧会弄得更快一点。这周我学会了for循环的简单使用,就要了我半条命,有点夸张了,就是刚刚学习这种东西还不太适应,努力是弥补缺点的有力武器。

posted @ 2020-11-08 11:52  w庆  阅读(141)  评论(3)    收藏  举报