博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第二次博客作业
阅读量:7218 次
发布时间:2019-06-29

本文共 3958 字,大约阅读时间需要 13 分钟。

目录


薄弱的知识点

目前自己学习中存在的薄弱的知识点具体有哪些?每个薄弱的知识点都是如何获知的,每个薄弱的知识点需要列举具体的例子说明。(5分)

  • :相对而言,对于字符串的操作应该还存在不足。例如,自己编写字符串处理函数(strlenstrcpystrcat以及strcmp) 并不能做到非常地熟练。在此过程中,也出现过一些错误。

    例如:①输入时未注意到字符串中地分隔符,因此获取失败。因此,需要特别的处理技巧。②忽略字符串末尾地“\0”结束符,经常忘记在结尾补充\0,导致一些未能预料地错误。

    对于这个,书本给出了strcpy的例子,我仿照了这个例子,去分别用指针方式和数组方式,实现这几个操作。对于strcmp这个不太熟悉如何写的,我阅读了库函数的代码,大致了解了它的思路。它的思路是,用指针下移的方法,查看两者字符是否出现\0,如果是,则结束。并且,下移的过程中,持续比较两者的 ACSII 码,按照0, -1, 1的方式返回结果值。

  • :数组的交并补集。我认为这是一个难点。以求对称差集为例。在求解的过程中还需要数组原有的顺序不变。这是出现在中段测试中的一道题目。在当时,我是没有什么思路的。后来,我发现这就是一个数学问题:求对称差集。对于我个人,我想出了一种算法,大致思路如下:就是先分别查找并去除两个数组内部的重复元素,然后求出交集,再分别用处理后的数组去除交集中的元素,即可实现。

    这一项我在第二项中将详细阐述。

  • :矩阵转置循环。这个并不算薄弱的知识点。但的确可以作为一个有趣的典例来学习。因为其循环的开始下标并不是0,这是观察矩阵转置的规律后就能够得出的。如果盲目的整个矩阵进行处理,反而可能出现问题。所以,我们仅需对左下角和右上角进行循环操作即可。

    这个目前参考了书本119页的例子,并且结合了线代的知识作了一些思考,避免了将整个矩阵进行操作的误区。

  • 目前熟悉的程度
  • [x] 字符串函数
  • [x] 交并补集的非库函数实现
  • [ ] 差集,对称差集非库函数实现
  • [x] 矩阵转置

有挑战性的题目

从第五章函数到第七章数组的函数题和编程题(主要是在PTA)中选出至少一道你觉得比较有挑战的题(已解决且不是奇奇的题)。写出解题报告包括:

(1)题目大意;

(2)解题思路;
(3)代码思路,比如画出流程图;
(4)核心技术总结;
(5)解题过程中存在的问题,以及如何得到解决的。(5分)
除去奇奇哥的题目,我挑选了两道题目在此列出。
一道是上述中段测试的一道求对称差集的题目,另一道则是扫描出最长单词。

Q1

7-1 找出不是两个数组共有的元素 (15 分)

给定两个整型数组,本题要求找出不是两者共有的元素。

输入格式

输入分别在两行中给出两个整型数组,每行先给出正整数N(≤20),随后是N个整数,其间以空格分隔。

输出格式

在一行中按照数字给出的顺序输出不是两数组共有的元素,数字间以空格分隔,但行末不得有多余的空格。题目保证至少存在一个这样的数字。同一数字不重复输出。

输入样例

10 3 -5 2 8 0 3 5 -15 9 10011 6 4 8 2 6 -5 9 0 100 8 1

输出样例

3 5 -15 6 4 1

大致思路

先遍历a数组,将其与b数组比较,将a数组中不同的元素放到c数组中暂存。

然后对c数组进行一次查重去重。
再遍历b数组,将其与a数组比较,将b数组中不同的元素放到c数组中暂存,然后对c数组进行第二次查重去重。
输出c数组。

流程图如下:

st=>start: 开始e=>结束op1=>operation: 遍历a数组并与b数组比较op2=>operation: 结果存到c数组op3=>operation: 对c数组查重op4=>operation: 遍历b数组并与a数组比较op5=>operation: 结果存到c数组op6=>operation: 输出c数组cond=>condition: 是否有重复元素cond2=>condition: 是否有重复元素 cond1=>condition: 是否有重复元素op7=>operation: 去重st->op1->op2->op3->condcond(yes)->op7->cond->cond(no)->op4->op5->op3->cond1cond(yes)->op7->cond1->econd2(no)->op6->e

此处的核心技术

最本质的需求,就是明确其中的数学本质,我们可以这样去理解,我们是在求这两个集合交集的补集。这在数学上又被称为对称差集。

由此,我引出了另一个思路。是否有一个函数,可以直接求出对称差集。查阅std库函数,的确有。因此思路2即使用该函数求解。

代码的核心部分:

for (j = 0; j < n1; j++) {    flag = 0;    for (i = 0; i < n2; i++)     {        if (a[j] == b[i]) flag = 1;    }    if (flag == 0)     {               int k, flag1 = 0;        for (k = 0; k <= count; k++)         {            if (c[k] == a[j]) {                flag1 = 1;            }        }        if (flag1 == 0)         {            c[count] = a[j];            count++;        }    }                   }

在这里,我想放出几种集合的关系图

五种集合关系图

思路2

直接采用求对称差集的函数。简单快捷高效

std::set_symmetric_difference(str1, str2)
另外几种集合的库函数如下:
set_unoin(求并集)
set_intersection(求交集)
set_difference(求差集)
set_symmetric_difference(求对称差集)

Q2

7-2 找最长单词 (20 分)

在主函数中输入一个字符串main_str,调用函数将main_str中最长的单词取出放入sub_str中(要求被调函数参数为main_strsub_str),在主函数中输出结果字符串sub_str。假定输入的字符串main_str中单词以一个或多个空格分开。若有多个单词长度相同,输出最后一个。要求函数用指针变量作形参。

输入格式

一个字符串,串中单词以一个或多个空格分开。

输出格式

输出字符串中最长的单词。

输入样例

在这里给出一组输入。例如:

She is a nice girl.

输出样例

在这里给出相应的输出。例如:

girl.

大致思路

遍历字符数组,然后参考教材中xx页的例子,运用跳过连续空格的技术。并且认为,句子于第一个’\0’出现时结束。设置一个flag,统计单词长度,并将每一次的最长单词与长度存放到str3和k中。在遍历数组的过程中不断比较,直至最后,得到正确的结果。

核心技术总结

流程图如下:

st=>start: 开始 e=>end: 结束 op1=>operation: 遍历数组op2=>operation: 结果存到c数组op3=>operation: 检查下一字符op4=>operation: 单词长度+1cond=>condition: 是否有空格st->op1->condcond(yes,left)->op3->econd(no)->op4->op3->e

代码的核心部分:

for (int i = 0; i <= strlen(str1); i++)    {        count++;        if (str1[i] == ' ' || str1[i] == '\0')        {            if (count >= max)            {                max = count;                point = i;            }            count = 0;        }    }    for (int i = point - max + 1; i < point; i++)    {        *(str2 + j) = *(str1 + i);        j++;    }    str2[j] = '\0';}

Q3

这里再简要提一下矩阵转置吧。

矩阵转置的核心在于弄懂转置的原理!!!
即沿对角线对称元素的互换

核心技术总结

void transpose(int a[][4]){    for (int i = 0; i < 4; i++)    {        for (int j = i + 1; j < 4; j++)        //注意这里的j的初值,因对上三角处理,j=i+1        {            int t = a[i][j];             a[i][j] = a[j][i];             a[j][i] = t;        }    }}

这里 j 的初值设置得比较特殊,值得注意。

转载于:https://www.cnblogs.com/cube-north/p/10088019.html

你可能感兴趣的文章
在凡客四个月的工作总结
查看>>
Qt颜色下拉框
查看>>
31、springboot与任务
查看>>
【转】 一个fork的面试题
查看>>
20131108
查看>>
django.http.request中HttpRequest对象的一些属性与方法
查看>>
英文对应解释
查看>>
Robotics ToolBox机械臂仿真
查看>>
linux添加环境变量
查看>>
【uva 1312】Cricket Field(算法效率--技巧枚举)
查看>>
VS2017 MVC项目,新建控制器提示未能加载文件或程序集“Dapper.Contrib解决方法
查看>>
【ora-err】ORA-03113: end-of-file on communication channel
查看>>
00.索引-综述
查看>>
strcpy
查看>>
AC3 Rematrix
查看>>
C#之Windows Form Application与attribute
查看>>
函数与指针分析实例
查看>>
爬虫:pycurl模块的使用说明
查看>>
Halcon算子翻译——try
查看>>
Win732位安装PostgreSQL9
查看>>