I. 目前学习的薄弱知识点有哪些:
1 字符数组和字符串数组的区别:经常分不清字符数组和字符串数组的初始化。
2 动态二维数组的申请:在写acm题的时候,有时候会经常使用二维数组,但是每次使用输入:int **p = new int [n][10]的时候,总会会报错(报:不能开创10个整型长度的空间,也就是不允许用常量来申请空间,所以经常会申请失败,最后只能默认使用int p[n][10],这样的形式)
3 用指针数组存储字符串数组:在上课的时候听的有点囫囵吞枣,下课后没有消化,以至于在广工的ACM比赛时,想要用的时候,不会用。例如其中的一道题:输入多组形如<数据类型> <变量名>的字符串,判断其所占用空间大小:当想要输入 :int asd,然后将这个字符串传入函数judge()【用来判断其所占空间,然后返回空间的值】,但是当想要建立字符串数组来存储这些字符串数组,却创建失败。(我的创建方法是:string a = new string [n];)最后编译不通过,想要用指针数组,却不会用,因此放弃此题了。
II. 难题解析:
题目:
给定两个整型数组,本题要求找出不是两者共有的元素。
1. 输入格式:
输入分别在两行中给出两个整型数组,每行先给出正整数N(≤20),随后是N个整数,其间以空格分隔。
2. 输出格式:
在一行中按照数字给出的顺序输出不是两数组共有的元素,数字间以空格分隔,但行末不得有多余的空格。题目保证至少存在一个这样的数字。同一数字不重复输出
1. 输入样例:
10 3 -5 2 8 0 3 5 -15 9 100
11 6 4 8 2 6 -5 9 0 100 8 1
2. 输出样例:
3 5 -15 6 4 1
题目分析:
此题的本质就是:找出两个数组的并举,属于数组的基本问题
解题思路【代码思路】:
- 创建·两个数组,然后用两个for循环分别输入。
- 创建数组c用于存放并集;
- 建立一个二重for循环,外循环遍历第一个数组,内循环遍历第二个数组,
- 让第一个数组的每一个数依次与第二个数组得所有数进行比较,如果不相等则让计数器count加1。结束内循环时,最后如果计数器得数不等于第二个数组得总数,就说明在这个数组里有与这个数相同的数,因此,此数不计入数组,如果相等则放入数组c;
- 同样的对b数组进行相同的操作;
- 创建函数judge(int a, int b【】,int n),判断数字a中是否有跟数组b中的某个数相等,有则返回0,没有返回1
- 创建一个新的数组d,遍历c数组,将c数组得每个数和都用judge函数判断,判断过了就将这个值赋给数组d
- 最后循环出c
核心技术总结:
- 通过遍历循环依次比较两个数组,得出他们的并集
- 创建一个比较函数,比较将要输入的数是否与数组现存的数重复;
解决过程中遇到的问题,如何解决;
最难的问题还是如何排除掉并集后的相同元素,当时想了很久,一直没想出来;
最后是考虑,并集数组依次放入到一个新的数组,然后每次往新的数组里添加数的时候就让这个数与已在数组中的数比较,看是否有相同的,有的话就不输入;没有就输入,最后得到的新数组,就是我们要的数组;、。