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来表示数的位置,会更加的直观
posted @ 2018-11-25 19:38  xingkyh  阅读(386)  评论(1编辑  收藏  举报