C语言博客作业04--数组
1.本章学习总结
1.1 思维导图
1.2 本章学习体会及代码量学习体会
1.2.1 学习体会
在这段时间里我们学习了数组的有关内容,有以下几点体会
1.定义数组时后其中的所以元素会被随机赋值,可以加上static将其中的所以元素初始化为0
2.在有序的数组中查找指定元素时可以用二分法以减少查找时间
3.在查找重复数字时可以再定义一个数组,以空间换取时间
4.对数组进行排序时,不同方法的速度不一致,对于较大n时快速排序会优于其他方法但较为不稳定
1.2.2 代码累计
周 | 代码量(行) |
---|---|
12 | 851 |
2.PTA总分
2.1截图PTA三次题目集:一维数组、二维数组和字符数组共3次题目集的排名得分
2.2 我的总分:200+105+150=455
3.PTA实验作业
3.1 PTA题目1
- 所谓“螺旋方阵”,是指对任意给定的N,将1到N×N的数字从左上角第1个格子开始,按顺时针螺旋方向顺序填入N×N的方阵里。本题要求构造这样的螺旋方阵。
3.1.1 算法分析
定义一个数组num[10][10]
定义整型变量 N,m,n,i,j
定义整型变量 a,b,c,d //用于控制方阵每一圈的循环输入
定义整型变量 x,y //用于表示方阵每一个数的位置
输入N
if N为偶数 then n=N/2
else n=N/2+1 //将方阵分为n圈输入
end if
a=N,b=c=N-1,d=N-2;
x=y=0;
m=1;
for j=1 to n do
for i=1 to a do//向右
num[x][y++]=m++;
end for
x++;y--;
for i=1 to b do//向下
num[x++][y]=m++;
end for
x--;y--;
for i=1 to c do//向左
num[x][y--]=m++;
end if
x--;y++;
for i=1 to d do//向上
num[x--][y]=m++;
end if
x++;y++;
a,b,c,d的值都减2
end if
输出方阵
3.1.2 代码截图
3.1.3 PTA提交列表及说明
- 这道题是让我头疼比较久的一道题,想了不少方法但都失败了,最后想到将方阵按圈输入才解决了这道题
3.2 PTA题目2
- 本题要求你计算A−B。不过麻烦的是,A和B都是字符串 —— 即从字符串A中把字符串B所包含的字符全删掉,剩下的字符组成的就是字符串A−B。
3.2.1 算法分析
定义字符数组a[10001],b[10001]
定义整型数组hash[130]并将其所有元素赋初值0
定义整型变量i
输入字符串a,b
for i=0 to 10000 do
if b[i]=='\0' then 退出循环
end if
hash[b[i]]++;//把b中的元素用hash记录一遍
end for
for i=0 to 10000 do
if a[i]=='\0' then 退出循环
end if
if hash[a[i]]==0 then 输出a[i]
end if //如果a[i]不为b中的元素则输出a[i]
end for
3.2.2 代码截图
3.2.3 PTA提交列表及说明
- 这道题算是哈希查找的一个比较灵活的应用,哈希查找不仅可以用来查找重复数字,还可以用来查找重复字符,只不过我在一开始做这道题时忽略了\0才导致了有一个测试点出错,将数组长度由10000改为10001就全部正确了
3.3 PTA题目3
- 输入2个大数,每个数的最高位数可达1000位,求2数的和。
3.3.1 算法分析
void Plus(char *a,char *b,int m,int n);
int main()
{
定义字符数组a[1001],b[1001]
定义整型变量i,j,k,c,d;
以字符串的形式输入两个大数a,b
获取a,b的长度分别赋值给c,d
if c>d then Plus(a,b,c,d)
else Plus(b,a,d,c)
end if
}
Void Plus(char *a,char *b,int m,int n)
{
定义整型变量i,j;
i=m-1;
for j=n-1 to 0 do
a[i]=a[i]+b[j]-'0';//从个位开始相加
if a[i]>'9' then//判断是否要进位
a[i]-=10;
if i-1 >=0 then a[i-1]+=1//判断进位的是否为最高位
else 输出一个1
end if
end if
end for
输出a
}
3.3.2 代码截图
3.2.3 PTA提交列表及说明
- 这道题本身难度不算大,只有最高位进位的问题让我多思考了一会了,因为最高位进位按照我的做法是无法储存在数组中的,只好另外输出
4.代码互评
4.1 代码截图
-
粤翰同学的代码
-
我的代码
4.2 二者的不同
- 1.两种方法均为正确解法且效率差距不大,但粤翰同学所用的变量比较少
- 2.粤翰同学的代码的赋值是在前一个数的值上加一,必须在对第一个数进行另外的处理
- 3.我的代码是用m来表示要赋予的值,用x,y来表示数的位置,会更加的直观