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

    0.展示PTA总分(0----2)

    一维数组

    二维数组

    字符数组

    1.本章学习总结(2分)

    1.1 学习内容总结

    学习了数组中数据的存储 和输出

    1.2 本章学习体会

    数组要注意不能越界 使用数组解题方便很多

    2.PTA实验作业(7分)

    2.1 题目名1

    7-11 求整数序列中出现次数最多的数 (15 分)

    2.1.1 伪代码

    由于该题测试数据有负数 所以不能利用数组下标 定义了两个数组 a和b,通过嵌套循环
    for(i=0;i<n-1;i++)
    {
    for(j=i+1;j<n;j++)
    {
    if(a[i]==a[j])
    {
    b[i]++;
    }
    }
    来确定后面的数组单位中是否有重复的数
    若有 则b数组+1;
    最后通过max下标定义法找出重复次数最多的数
    int max;
    max=0;
    for(i=1;i<n;i++)
    {
    if(b[max]<b[i])
    max=i;
    }

    2.1.2 代码截图

    2.1.3 造测试数据


    2.1.4 PTA提交列表及说明


    部分正确:没有考虑到数据中有负数的情况
    用下标法 来寻找最大值

    2.2 题目名2

    7-2 杨辉三角 (10 分)

    2.2.1 数据处理

    观察该杨辉三角 发现周围都是1 于是先定义一个二维数组 把所有数赋值成1
    int a[10][10];
    int i,j;
    int n;
    for(i=0;i<10;i++)
    {
    for(j=0;j<10;j++)
    {
    a[i][j]=1;
    }
    }
    被包围在其中的元素 都等于上面两个元素的和
    for(i=2;i<10;i++)
    {
    for(j=1;j<i;j++)
    {
    a[i][j]=a[i-1][j]+a[i-1][j-1];
    }
    }

    2.2.2 代码截图

    2.2.3 造测试数据


    2.2.4 PTA提交列表及说明


    一次性正确

    2.3 7-6 阅览室 (20 分)

    2.3.1 数据处理

    题目较繁琐 可分为两段 一段是管理员输入0时即结束的循环 另一段判断平均阅读时间和借阅次数
    并封装一个函数
    int a[2000][3];
    int num;
    char op;
    int n1,n2;
    int N;
    int k;
    int i;
    scanf("%d",&N);
    for(i=1;i<=N;i++)
    {
    k=0;
    while(1)
    {
    scanf("%d %c%d:%d",&num,&op,&n1,&n2);
    if(num==0)
    break;
    else
    {
    a[k][0]=num;
    a[k][1]=op;
    a[k][2]=n1*60+n2;

            }
            k++;
            
    
        }
    

    这是第一段 当管理员输入数据时 先判断number是否为0 若不是 则将数据存放于一个三列的二维数组中 k++
    k为函数里的循环次数上限
    void cf(int a[][3],int k)
    {
    int cnt=0;
    double time=0;

    for(int i=0;i<k;i++)
    {
        if(a[i][1]=='S')
        {
            for(int j=i+1;j<k;j++)
            {
                if(a[j][1]=='S'&&a[j][0]==a[i][0])
                {
                    break;
                }
                else if(a[j][1]=='E'&&a[j][0]==a[i][0])
                {
                    cnt++;
                    time+=a[j][2]-a[i][2];
                    
                    break;
                }
                    
                    
            }
        }
    }
    if(cnt!=0)
    printf("%d %.0f
    ",cnt,time/cnt);
    else
        printf("0 0
    ");
    

    当循环找到s时 继续循环 若又找到s 并且书号一样 则break 可去除重复数据
    当碰到E时 计算相隔的时间即可
    }

    2.3.2 代码截图


    2.3.3 造测试数据

    2.3.4 PTA提交列表及说明


    多种错误:函数里查找是否有无效数据时写成j=i而不是j=i+1
    使得总会找到一个相等的S

    3.阅读代码(-2--1分)

  • 相关阅读:
    ubuntu下ssh服务相关操作
    搜索引擎的基础-倒排索引
    mysql重置密码
    mysql 服务器配置
    Activiti如何替换已部署流程图
    循环select查询结果集
    存储过程范例,有输入输出参数,带回滚
    sql server中字符串无法替换空格的问题
    Myeclipse实用快捷键总结
    Linux中添加用户与删除用户
  • 原文地址:https://www.cnblogs.com/xzb011026/p/11878028.html
Copyright © 2011-2022 走看看