1 目前自己学习中存在的薄弱的知识点具体有哪些?每个薄弱的知识点都是如何获知的,每个薄弱的知识点需要列举具体的例子说明。(5分)
2 从第五章函数到第七章数组的函数题和编程题(主要是在PTA)中选出至少一道你觉得比较有挑战的题(已解决且不是奇奇的题)。写出解题报告包括:(1)题目大意;(2)解题思路;(3)代码思路,比如画出流程图;(4)核心技术总结;(5)解题过程中存在的问题,以及如何得到解决的。(5分)
1. 偶尔还会受java自动补全和提示的影响,对某些包和关键字记不太清楚,会打错名称。要加强练习,熟悉这些包的功能和应用。
2.(1)题目大意
找出不是两个数组共有的元素
给定两个整型数组,本题要求找出不是两者共有的元素。
输入格式:
输入分别在两行中给出两个整型数组,每行先给出正整数N(≤20),随后是N个整数,其间以空格分隔。
输出格式:
在一行中按照数字给出的顺序输出不是两数组共有的元素,数字间以空格分隔,但行末不得有多余的空格。题目保证至少存在一个这样的数字。同一数字不重复输出。
输入样例:
10 3 -5 2 8 0 3 5 -15 9 100
11 6 4 8 2 6 -5 9 0 100 8 1
输出样例:
3 5 -15 6 4 1
(2)解题思路
-
设置三个数组a[i],b[i], list[i]存储初数组元素;
-
依次找出a[i]中不同于b[i]的元素存储在list[i]中,和b[i]中不同于a[i]的元素存储在list[i]中。
-
在数字存进list[ i ]前,确保list[ i ]中没有它。
(3)代码思路
#include<iostream> #include <iomanip> using namespace std; struct info{ char name[30]; double price; }; int main(){ int n,k; cin>>n; int a[n]; for(int i=0;i<n;i++){ cin>>a[i]; } cin>>k; int b[k]; for(int i=0;i<k;i++){ cin>>b[i]; } int list[n+k]; int q=0; for(int i=0;i<n;i++){ int jude=0; for(int j=0;j<k;j++){ if(a[i]==b[j]){ jude =1; break; } } if(jude==0){ int x=0; for(int y=0;y<q;y++){ if(list[y]==a[i]){ x=1;break; } } if(x==0){ list[q]=a[i]; q++; } } } for(int i=0;i<k;i++){ int jude=0; for(int j=0;j<n;j++){ if(b[i]==a[j]){ jude =1; break; } } if(jude==0){ int x=0; for(int y=0;y<q;y++){ if(list[y]==b[i]){ x=1;break; } } if(x==0){ list[q]=b[i]; q++; } } } for(int i=0;i<q-1;i++){ cout<<list[i]<<" "; } cout<<list[q-1]; return 0 ; }
(4)核心技术总结
将两数组中不重复的数字存进第三个数组中,且该数组里不能出现重复的数字。
(5)解题过程中存在的问题,以及如何得到解决的。
会出现某数字在a数组中出现两次,但不在数组b出现,在输出不重复数字时,它只需输出一次。
解决方法:
将两数组中不重复的数字放进第三个数组list中,且其不能与list中已有的数字重复。