[解题报告] 《C语言入门100例》(第10例) 平均数

简介: [解题报告] 《C语言入门100例》(第10例) 平均数

零、写在前面


       这个系列不经常更新,今天这个题目又双叒叕觉得有点意思,我们一起看一看,主要知识点在


《C语言入门100例》(第10例) 平均数

https://blog.csdn.net/WhereIsHeroFrom/article/details/118208466


一、主要知识点


       1.强制类型转换


       由于平均数会是一个浮点数,在计算的时候会用到类型转换。求平均数的时候double/int返回的值仍然是double。


int a,n,i;
double avg = 0;
for(int i = 0;i < n;++i){
    scanf("%d",&a);
    avg += a; //强制类型转换
}
avg /= n;    //第二次
printf("%.2f\n",avg);

       2.滑动窗口(补充知识点)


               当我们求长度为k的连续子序列的时候,每次都要回溯,浪费大量的时间。看两张图对比,可以发现

image.png

     

image.png

      image.png


for(int i = 0;i < k;++i)    sum += nums[i];//最前面的初始化
    int maxsum = sum;
    for(int i = k;i < numsSize;++i){            //滑动窗口计算每个子序列的和
        sum += nums[i];            //加入当前值
        sum -= nums[i - k];        //减去滑动窗口最前面的值
        maxsum = sum > maxsum? sum :maxsum;//更新最大值
    }

二、课后习题


  643. 子数组最大平均数 I


643. 子数组最大平均数 I

https://leetcode-cn.com/problems/maximum-average-subarray-i/


思路


利用上面说到的滑动窗口统计返回值就好了,注意类型转换。

double findMaxAverage(int* nums, int numsSize, int k){
    int sum = 0;
    //滑动窗口统计
    for(int i = 0;i < k;++i)    sum += nums[i];
    int maxsum = sum;
    for(int i = k;i < numsSize;++i){
        sum += nums[i];
        sum -= nums[i - k];
        maxsum = sum > maxsum? sum :maxsum;
    }
    //返回相应的结果
    return (double) maxsum /k;
}


结果分析

image.png


凑合玩



写在最后


这个系列确实是不怎么更新,但是我觉得有难度的题都会进行更新,所以还是建立一个合集,有需要的欢迎关注。


相关文章
|
2天前
|
C语言
王桂林C语言从放弃到入门课程
课程目标16天,每天6节课,每节40分钟课堂实录,带你征服C语言,让所有学过和没有学过C语言的人,或是正准备学习C语言的人,找到学习C语言的不二法门。适用人群所有学过和没有学过C语言的人,或是正准备学习C语言的人!
32 2
王桂林C语言从放弃到入门课程
|
2天前
|
存储 编译器 C语言
初识C语言——详细入门(系统性学习day4)
初识C语言——详细入门(系统性学习day4)
|
2天前
|
存储 自然语言处理 编译器
C语言从入门到实战——编译和链接
在C语言中,编译和链接是将源代码转换为可执行文件的两个主要步骤。 编译过程包括以下步骤: 1. 预处理:将源代码中的预处理指令(如`#include`和`#define`)替换为实际的代码。 2. 编译:将预处理后的代码转换为汇编语言。 3. 汇编:将汇编语言转换为机器码指令。 链接过程包括以下步骤: 1. 目标文件生成:将每个源文件编译后生成的目标文件(`.o`或`.obj`)进行合并,生成一个总的目标文件。 2. 符号解析:查找并解析目标文件中的所有符号(例如全局变量和函数名),以确保每个符号都有一个唯一的地址。 3. 地址重定位:根据符号表中符号的地址信息,将目标文件中的所有地址引用
43 0
|
2天前
|
编译器 程序员 C语言
C语言从入门到实战——动态内存管理
在C语言中,动态内存管理是指程序运行时,通过调用特定的函数动态地分配和释放内存空间。动态内存管理允许程序在运行时根据实际需要来分配内存,避免了静态内存分配在编译时就确定固定大小的限制。
47 0
|
2天前
|
编译器 Linux PHP
C语言从入门到实战——预处理详解
C语言预处理是C语言编译过程的一个阶段,它在编译之前对源代码进行一系列的处理操作,包括宏替换、文件包含、条件编译等,最终生成经过预处理的代码,然后再进行编译。
48 0
|
2天前
|
存储 缓存 C语言
C语言从入门到实战——文件操作
C语言中的文件操作是通过使用文件指针来实现的。可以使用标准库中的函数来打开、读取、写入和关闭文件。
58 0
|
2天前
|
存储 自然语言处理 编译器
振南技术干货集:振南当年入门C语言和单片机的那些事儿(3)
振南技术干货集:振南当年入门C语言和单片机的那些事儿(3)
|
22小时前
|
C语言
C语言——入门分支与循环
C语言——入门分支与循环
2 0
|
2天前
|
编译器 C语言
函数深入解析(C语言基础入门)
函数深入解析(C语言基础入门)
|
2天前
|
C语言
数组深入剖析(C语言基础入门)
数组深入剖析(C语言基础入门)