zoukankan      html  css  js  c++  java
  • C语言博客作业04数组

    1.1 思维导图

    1.2 本章学习体会及代码量学习体会

    1.2.1 学习体会

    本章学习相对指针来说好理解,但想对前面的知识来说就有一个新的提升,有一定的挑战,
    pta作业也比较多,题型也多,但基本都是一些基础的东西,数组在学之前有过一定的使用,
    所以在使用时也不会感觉很陌生,总之本章学习比较顺利,一些比较难理解的题目通过一
    定时间的研究后也顺利解决。

    1.2.2 代码累计

    2.PTA总分

    2.1截图PTA三次题目集

    2.2 我的总分

    一维数组:200
    二维数组:105 字符数组:150 我的总分:455

    3.PTA实验作业

    3.1 PTA题目1

    7-8 找出不是两个数组共有的元素20 分)
    给定两个整型数组,本题要求找出不是两者共有的元素。
    输入格式:
    输入分别在两行中给出两个整型数组,每行先给出正整数N(≤20),随后是N个整数,其间以空格分隔。 
    输出格式:
    在一行中按照数字给出的顺序输出不是两数组共有的元素,数字间以空格分隔,但行末不得有多余的空格。题目保证至少存在一个这样的数字。同一数字不重复输出。 

    3.1.1 算法分析

    ```c
    定义数组c[40],m,n,i,j,count=-1,flag
    输入第一行个数m
    定义数组a[m]用于存放第一行的数
    for i=0 to i=m-1 do
            输入第一行的数
    end for
    输入第二行个数n
    定义数组b[n]用于存放第二行的数
    for i=0 to i=n-1 do
            输入第二行的数
    end for
    for i=0 to i=m-1 do    //将a数组中有b数组中没有的数存入c数组中
            flag=0
            for j=0 to j=n-1 do
                    if a[i]=b[j] then 
                            flag=1
                            break
            end for
            if flag=0 then
                    count++
                    c[count]=a[i]
    end for
    for i=0 to i=n-1 do    //将b数组中有a数组中没有的数存入c数组中
            flag=0
            for j=0 to j=m-1 do
                    if b[i]=a[j] then 
                            flag=1
                            break
            end for
            if flag=0 then
                    count++
                    c[count]=a[i]
    end for
    
    for i=0 to i=count-1 do   //c数组中有重复的数据不多输出
            for j=0 to j=i-1 do
                    if c[j]=c[i] then
                            flag=1
                            break
             end for
            if c[i]=c[count] then  //与最后一个数据相等的都不输出
                    flag=1
            if flag=0 then
            输出c[i]
    end for
    输出c[count]
    ```        

    3.1.2 代码截图

    3.1.3 PTA提交列表及说明

    Q1:刚开始题目较长,以为没有对重复数据只输出一个进行规定
    A1:后来发现进行解决
    Q2:后来的代码输出最后一个会带有一个空格
    A2:用了多个方法及时解决

    3.2 PTA题目2

    7-4 阅览室20 分)
    天梯图书阅览室请你编写一个简单的图书借阅统计程序。当读者借书时,管理员输入书号并按下S键,程序开始计时;当读者还书时,管理员输入书号并按下E键,程序结束计时。书号为不超过1000的正整数。当管理员将0作为书号输入时,表示一天工作结束,你的程序应输出当天的读者借书次数和平均阅读时间。
    注意:由于线路偶尔会有故障,可能出现不完整的纪录,即只有S没有E,或者只有E没有S的纪录,系统应能自动忽略这种无效纪录。另外,题目保证书号是书的唯一标识,同一本书在任何时间区间内只可能被一位读者借阅。
    输入格式:
    输入在第一行给出一个正整数N(≤10),随后给出N天的纪录。每天的纪录由若干次借阅操作组成,每次操作占一行,格式为:
    书号([1, 1000]内的整数) 键值(S或E) 发生时间(hh:mm,其中hh是[0,23]内的整数,mm是[0, 59]内整数)
    每一天的纪录保证按时间递增的顺序给出。
    输出格式:
    对每天的纪录,在一行中输出当天的读者借书次数和平均阅读时间(以分钟为单位的精确到个位的整数时间)。

    3.2.1 算法分析

    ```c
    定义静态数组time1[1001],book[1001]
    定义i,N,num,r,hour,min,count=0
    定义 time=0
    输入天数N
    for N to N=1 do
            输入 书号num,借还标志r,点数hour,分钟数min
            while num!=0 do
                    if r=='S' then
                            book[num]=1
                            time1[num]=hour*60+min     //记录借的时间
                    else if r=='E'&&book[num]==1 then
                            book[num]=0
                            count++                         //计算有效总次数
                            time=hour*60+min-time1[num]+time  //计算总时间
                     输入 书号num,借还标志r,点数hour,分钟数min
    end for
    if count!=0 then
    输出次数和时间
    else
    输出0 0
    time=0,count=0
    ```

    3.2.2 代码

    3.2.3 PTA提交列表及说明

    Q1:刚开始的时候用二维数组去尝试
    A1:作了挺久感觉并没有什么思路,一直有部分错误
    Q2:后来改为用一维数组尝试
    A2:经过了几番敲推后终于get了

    3.3 PTA题目3

    7-4 查验身份证 15 分)
    一个合法的身份证号码由17位地区、日期编号和顺序编号加1位校验码组成。校验码的计算规则如下:
    首先对前17位数字加权求和,权重分配为:{7910584216379105842};然后将计算的和对11取模得到值Z;最后按照以下关系对应Z值与校验码M的值:
    Z:0 1 2 3 4 5 6 7 8 9 10
    M:1 0 X 9 8 7 6 5 4 3 2
    现在给定一些身份证号码,请你验证校验码的有效性,并输出有问题的号码。
    输入格式:
    输入第一行给出正整数N(≤100)是输入的身份证号码的个数。随后N行,每行给出1个18位身份证号码。
    输出格式:
    按照输入的顺序每行输出1个有问题的身份证号码。这里并不检验前17位是否合理,只检查前17位是否全为数字且最后1位校验码计算准确。如果所有号码都正常,则输出All passed。

    3.3.1 算法分析

    ```c
    定义 N,i,k,sum,flag=0,c[17]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2}
    输入身份证数N
    getchar()
    定义 a[20],b[11]={'1','0','X','9','8','7','6','5','4','3','2'}
    for k=1 to k=N do
            sum=0,i=0
            while 输入a[i]!='\n' do
                    i++
            a[i]='\0'
            for i=0 to i=16 do
                    if a[i]>'9'||a[i]<'0' then
                            输出字符串a
                            换行
                            flag=2
                            break
            if flag=2 then
                    flag=1
                    continue
            for i=0 to i=16 do
                    sum=sum+(a[i]-'0')*c[i]
            end for
            sum=sum%11
            if b[sum]!=a[17] then
                    输出字符串a
                    换行
                    flag=1
    end for
    if flag=0 then
    输出 All passed
    ```

    3.3.2 代码

    3.3.3 PTA提交列表及说明

    Q1:题目所说的无法理解
    A1:用百度去查了,明白意思
    Q2:flag搞混乱了
    A2:对代码进行逐条分析,找到了关系

    4.代码互评

    4.1 代码截图

    同学代码

    我的代码

    4.2 二者的不同

    1.这位同学定义的变量多,看起来比较不直观
    2.这位同学用a,b,c,d来作为每行或者每列来赋值的个数,我是用从1到M再从M到1的方式来
    赋值,所以减少了变量的定义
    3.我们都利用了规律对每圈进行拆分后,进行赋值
  • 相关阅读:
    天真的误会
    Unity3D笔记
    http纪要
    JQuery中ajax错误处理之页面跳转
    php代码片段
    3D游戏相关笔记
    Javascript笔记
    PHP对观察者模式的支持
    为什么要使用多线程
    死锁和活锁
  • 原文地址:https://www.cnblogs.com/putianliuzhong/p/10089578.html
Copyright © 2011-2022 走看看