• C语言博客作业04数组


    0.展示PTA总分

    一维数组

    二维数组

    1.本章学习总结

    1.1 学习内容总结

    1.数组中如何查找数据:可以用循环语句将数组中所有的数检查一遍,若找到便退出循环语句;还有二分法:定义left(数据集的开头),right(数据集结尾)两个变量,然后在这组数据中找到mid=(left+right)/2,然后将待查找元素与mid所指元素进行比较,如果相等将索引返回,如果查找元素大于mid所指元素,则将left向右移动即left=mid+1;如果查找元素小于mid所指元素,则将left向左移动即right=mid-1。重复以上过程直到left>right(因为此时表明并不存在待查找元素)

    2.数组中如何插入数据:把数据放在需要的位置之后,该位置原本的数往下移一位

    3.数组中如何删除数据:将该位数用下一位的数来代替,然后接下来的数也依次往前移动一位,也可以重新定义一个数组,重新存放除要删除的数据之外的所有数据。

    4.数组中目前学到排序方法:冒泡排序法:用循环语句来对比每两个相邻的数据,大的数下沉,小的数上浮。选择排序法:每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到全部待排序的数据元素排完。
    5:哈希数组:不懂

    1.2 本章学习体会

    代码量:421

    2.PTA实验作业

    2.1 题目名:17-9 调查电视节目受欢迎程度

    2.1.1 伪代码

    输入数据
    for(i = 0; i < n; i++)
        如果 a[i]等于1~8中的某个数
        数组b 对应的位置加一
    end for
    输出结果
    

    2.1.2 代码截图

    2.1.3 造测试数据

    2.1.4 PTA提交列表及说明

    提交列表说明:
    答案错误:输出的格式错误
    多种错误:输出的格式错误,并且循环体的语句有问题,后面干脆改成if语句的堆砌
    部分正确:某一行写成for (i = 0; i < n; i++);删去分号答案正确

    2.2 题目名2:7-4 数组循环左移
    2.2.1 数据处理

    输入数据
    for(k = 1; k 小于等于 m; k++)
        储存a[0]的值
         for(i = 1; i小于等于n - 1; i++)
         令数组移动,即a[i - 1] = a[i]
         end for
        令a[n - 1]读取a[0]的值
    end for
    输出结果
    

    2.2.2 代码截图

    2.2.3 造测试数据

    输入数据 输出数据 说明
    1 2 3 4 5 6 7 8 4 5 6 7 8 1 2 3 正常数据
    5 4 2 6 8 7 3 1 9 8 7 3 1 9 5 4 2 6 正常数据

    2.2.4 PTA提交列表及说明

    提交列表说明:
    答案错误:循环的条件没理清楚,导致答案错误,通过重新计算解决
    编译错误: 语法有问题 好像少了个括号还是分号
    格式错误:输出格式没注意题目要求,修改后答案正确

    2.3 题目名3:7-7 冒泡法排序
    2.3.1 数据处理

    输入数据
    while循环k次
       for循环n次
         如果a[i]大于a[i + 1]
            交换两个数的值
       end for
    end while
    输出结果
    

    2.3.2 代码截图

    2.3.3 造测试数据

    2.3.4 PTA提交列表及说明

    提交列表说明:
    答案错误:没弄明白题目要干什么,然后懂了
    3.阅读代码

    #include<iostream>
    #include<vector>
    #include<string.h>
    #include<stdio.h>
    #include<algorithm>
    #include<cmath>
    using namespace std;
    enum {
        SIZ = 40,
    };
     
    char rep[10] = {0, 1, 5, 3, 4, 2, 9, 7, 8, 6};
    char dig[SIZ];
    int len;
     
    int fun(){
        int i, t = dig[len], hi;
        if(rep[t] > t){
            dig[len] = rep[t];
            return 1;
        }
        hi = t;
        for(i=len-1; i>=0; i--){
            t = dig[i];
            if(t < hi || rep[t] > t){
                int k=i;
                for(int j=i+1;j<=len;j++){
                    t = dig[j];
                    if(t > dig[i] && t <= hi){
                        hi = t;
                        k = j;
                    }
                    if(rep[t] > dig[i] && rep[t] <= hi){
                        hi = rep[t];
                        dig[j] = rep[t];
                        k = j;
                    }
                }
                t = dig[i];
                if(rep[t] > t && (hi < t || hi > rep[t])){
                    dig[i] = rep[t];
                } else {
                    swap(dig[i], dig[k]);
                }
                for(k= i+1; k<=len; k++){
                    dig[k] = min(dig[k], rep[dig[k]]);
                }
                sort(dig+i+1, dig+len+1);
                return 1;
            }
            hi = max(hi, t);
        }
        return 0;
    }
     
    void trim(){
        len = 0;
        for(int i=0; dig[i]; i++){
            if(dig[i]!='.'){
                dig[len++] = dig[i] - '0';
            }
        }
        dig[len--] = 0;
    }
    void output(int s){
        if(s <=0){
            printf("The price cannot be raised.\n");
            return ;
        }
        for(s=0; s<len; s++){
            printf("%d", dig[s]);
        }
        printf(".%d\n", dig[len]);
    }
    int main(){
     
        scanf("%s", dig);
        while(dig[0]!='.'){
            trim();
            output(fun());
            scanf("%s", dig);
        }
        return 0;
    }
    

    理解:代码的功能是给定当前的油价,计算下一个最高价格,它可以使用相同的数字和相同的格式规则显示。仅包含小数点的输入行终止输入。如果价格不能提高,输出"The price cannot be raised."这个代码使用了函数的嵌套,而主函数只有短短的几行,作者熟悉运用各种函数接口,各种函数让人眼花缭乱,不由得让我想起了上次的大作业就可以借鉴这种模式。

  • 相关阅读:
    【Java并发编程】:使用synchronized获取互斥锁
    【Java并发编程】:Runnable和Thread实现多线程的区别
    【Java并发编程】:volatile变量修饰符
    【Java并发编程】:守护线程与线程阻塞的四种情况
    【Java并发编程】:线程挂起、恢复与终止
    【Java并发编程】:线程中断
    redis配置详细解析
    redis常用命令
    centos7上安装redis
    redis简介
  • 原文地址:https://www.cnblogs.com/eeee9876/p/11879034.html
Copyright © 2020-2023  润新知