第二次博客作业
1 目前自己学习中存在的薄弱的知识点具体有哪些?每个薄弱的知识点都是如何获知的,每个薄弱的知识点需要列举具体的例子说明。(5分)
截止目前,我认为我的薄弱部分在于函数的调用、字符数组的处理及指针的使用不熟练。
(1)函数调用方面。在一些代码比较长的题目中,发觉自己总是只用main函数包括所有东西,于是开始尝试写函数,但关于实参、形参及返回值的使用还不是很熟练。
(2)字符数组方面。字符串处理函数还不能熟练调用,对字符串的处理不熟悉。
(3)指针方面。分不清楚何时适合用指针。在发生函数调用时,有时会不清楚传递和返回的到底是地址还是值。
2 从第五章函数到第七章数组的函数题和编程题(主要是在PTA)中选出至少一道你觉得比较有挑战的题(已解决且不是奇奇的题)。写出解题报告包括:(1)题目大意;(2)解题思路;(3)代码思路,比如画出流程图;(4)核心技术总结;(5)解题过程中存在的问题,以及如何得到解决的。(5分)
(1) 给定某数字A(1≤A≤9)以及非负整数N(0≤N≤100000),求数列之和S=A+AA+AAA+⋯+AA⋯A(N个A)。
(2)如果N取一个很大的值的话,结果会很大,即使使用long long 也会溢出。但由于每个数的所有数字都是相同的,想到可以使用一个数组来分别存储结果的每一位数,最后输出数组即为最终结果。
(3)
for(int i=0;i<x;i++)/*n.321
A
AA
AAA
AAAAA
.......*/
{
d += (x-i)*a; //先求第一列数字之和
b[i]=d%10; //得到结果的个位数字
d/=10; //得到要加到第二列的数字, 重复上述三步,直到第n列
}
for(int i=x-1;i>=0;i--)
cout<<b[i]; //从高位到低位输出结果
(4)核心技术:根据计算特点,利用数组完成计算
(5)问题:开始时直接使各个数字相加,出现运行超时的情况,不知如何优化。 解决:自己反复思考后上网查相关资料。