• 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来表示数的位置,会更加的直观
  • 相关阅读:
    Java实现 LeetCode 34 在排序数组中查找元素的第一个和最后一个位置
    Java实现 LeetCode 34 在排序数组中查找元素的第一个和最后一个位置
    MFC的消息映射机制揭秘
    vc++窗口的创建过程(MFC消息机制的经典文章)
    映射窗口句柄对象
    评侯捷的<深入浅出MFC>和李久进的<MFC深入浅出>
    主函数 main WinMain _tmain _tWinMain 的区别
    深入分析MFC文档视图结构(项目实践)
    深入解析MFC -- 句柄与对象的关系
    深入浅出Win32多线程设计之MFC的多线程-线程与消息队列(经典)
  • 原文地址:https://www.cnblogs.com/xycm/p/10015771.html
Copyright © 2020-2023  润新知