zoukankan      html  css  js  c++  java
  • 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来表示数的位置,会更加的直观
  • 相关阅读:
    背水一战 Windows 10 (90)
    背水一战 Windows 10 (89)
    背水一战 Windows 10 (88)
    背水一战 Windows 10 (87)
    背水一战 Windows 10 (86)
    背水一战 Windows 10 (85)
    背水一战 Windows 10 (84)
    背水一战 Windows 10 (83)
    背水一战 Windows 10 (82)
    背水一战 Windows 10 (81)
  • 原文地址:https://www.cnblogs.com/xycm/p/10015771.html
Copyright © 2011-2022 走看看