497 蓝桥杯 成绩分析 简单

news/2024/11/20 12:29:44/

497 蓝桥杯 成绩分析 简单

//C++风格解法1,*max_element()与*min_element()求最值
//时间复杂度O(n),通过率100%
#include <bits/stdc++.h>
using namespace std;using ll = long long;
const int N = 1e4 + 10;
int a[N];int main(){ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);int n;cin >> n;for(int i = 1; i <= n; ++i)cin >> a[i];cout << *max_element(a + 1, a + 1 + n) << '\n';cout << *min_element(a + 1, a + 1 + n) << '\n';ll sum = 0;for(int i = 1; i <= n; ++i)sum += a[i];cout << fixed << setprecision(2) << 1.0 * sum / n <<'\n';return 0;
}

*max_element()与*min_element()分别用来求最大元素和最小元素的值,

如果不加 * 获取的是地址。

虽然集合作为二叉树实现, 但是时间复杂度O(n),n为数组大小(由传入的参数决定)

在集合或其他有序容器上使用相同的比较函数,函数是线性的,触及每个元素,因为在恒定时间内使用.rbegin()

如果使用不同的比较函数,则无法保证顺序一致,但同样必须触及每个元素,并且至少是线性的。

接收参数:容器的首尾地址(迭代器)(可以是一个区间)

返回:最值元素的值

C++ primer (中文版第四版)第273页

9.3.2 begin和end成员

        begin和end操作产生指向容器内第一个元素和最后一个元素的下一个位置的迭代器,

        如下所示。这两个迭代器通常用于标记包含容器中所有元素的迭代范围。

        

        c.begin() 返回一个迭代器,它指向容器c的第一个元素

        c.end() 返回一个迭代器,它指向容器c的最后一个元素的下一个位置

        c.rbegin() 返回一个逆序迭代器,它指向容器c的最后一个元素

        c.rend() 返回一个逆序迭代器,它指向容器c的第一个元素前面的位置

       

        上述每个操作都有两个不同的版本:一个是const成员,另一个是非const成员。这些操作返回什么类型取决于容器是否为const。如果容器不是const,则这些操作返回iterator或reverse_iterator类型。如果容器是const,则其返回类型要加上const_前缀,也就是const_iterator和const_reverse_iterator类型。

  • begin();end()正序迭代器
  • cbegin();cend() 返回 const 的begin();end()
  • rbegin();rend() 逆序迭代器
  • crbegin();crend() 返回 const 的 rbegin();rend()

用fixed,一个manipulator,消除浮点数的科学计数法。

只要出现了fixed,后面都按fixed输出。

fixed与setprecision(n)连用可以控制小数点后的位数,可以理解为定点数记数法。

没有fixed,就是浮点数记数法,控制的就是有效数字的位数(包括小数点前的)

fixed是一个计算机专业术语,指向托管变量的指针并在 statement 执行期间“钉住”该变量。
fixed流操作符,它表示浮点输出应该以固定点或小数点表示法显示。

//C++风格解法2,打擂台算法,max()、min()通过率100%
#include <bits/stdc++.h>
using namespace std;const int N = 1e4 + 10;
int a[N];int main(){ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);int n;cin >> n;for(int i = 1; i <= n; ++i)cin >> a[i];int mx = a[1], mi = a[1];for(int i = 1; i <= n ; ++i){mx = max(mx, a[i]);mi = min(mi, a[i]);}cout << mx << '\n' << mi << '\n';int sum = 0;for(int i = 1; i <= n; ++i)sum += a[i];cout << fixed << setprecision(2) << 1.0 * sum / n <<'\n';//1.0 * sum / n 强制转化为浮点数return 0;
}

min(a,b)返回a和b中较小的那个值,只能传入两个值,或传入一个列表。

min(1,2) = 1

min({1,2,3,4}) = 1

同理可得max(a,b)的含义和表示,时间复杂度为O(1),传入参数为数组时时间复杂度为O(n),

n为数组大小。

 C/C++中“/”本身带有取整的含义,n*1/i,即意味着整数除以整数,结果取整;n*1.0/i即意味着浮点数除以整数,结果会强制转换为浮点数。

//C风格解法3,打擂台算法,通过率100%
#include <stdio.h>
#include <stdlib.h>int main(){int n,i,a[10001];float aver = 0;int max = 0,min = 100;scanf("%d", &n);for(i = 0; i < n; i++){scanf("%d", &a[i]);aver += a[i];if(a[i] > max)max = a[i];if(a[i] < min)min = a[i];}aver = aver / n;printf("%d\n %d\n %.2f",max,min,aver);return 0;
}

在C语言中,printf() 函数中的 %5.2f 是一个格式说明符,用于格式化浮点数的输出。

  • %:格式说明符的起始标志。

  • 5:字段宽度,表示输出的最小字符数,包括空格(可能没有)、整数部分、小数点和小数部分。它指定了输出的总宽度为5个字符。

  • .:小数点用来分隔整数部分和小数部分。

  • 2:精度,表示小数部分的位数。指定小数部分保留2位。

  • f:表示要格式化的数据类型是浮点数。

  • 浮点数 3.14159 并使用 %5.2f 进行格式化输出,它将输出为 "空格3.14",总共占据5个字符的宽度,其中有一个空格字符,一个整数,一个小数点字符和两个小数。而且没有负号,所以在左侧输出一个空格占位,即右对齐输出。

  • 浮点数3.5,使用%-5.2f进行格式化输出,那么就是输出"3.50空格",3.50总共有4位,总共占据5个字符的宽度,而且有负号,所以在右侧输出一个空格占位,即左对齐输出。

  • 没有负号右对齐,位数不足,左边补齐空格,满足或超过位数,原样输出。

  • 有负号左对齐,位数不足,右边补空格。

  • printf("%-4d",20); 输出"20空格空格"(左对齐,右边补2个空格),printf("%-4d",12345); 输出:12345(原样输出)

  • printf("%4d",20); 输出"空格空格20"(右对齐,左边补2个空格),printf("%2d",12345); 输出:12345(原样输出)

reference:

C++max_element()min_element()函数简介 - 知乎 (zhihu.com)

C++ max_element()的使用-CSDN博客

c++ - STL max_element 的复杂度 - IT工具网 (coder.work)

反向迭代器(rbegin,rend)-CSDN博客

C++ 容器中 begin()、cbegin()、rbegin()、crbegin-CSDN博客

详解C++中fixed,setprecision(),setw()的用法_c++ fixed-CSDN博客

如何深刻理解IEEE浮点数的表示(IEEE floating-point representation)_ieee floating point-CSDN博客
C++003-C++变量和数据类型2_c++输入正方形的边长m和n,计算阴影部分的面积-CSDN博客
C语言基础;打擂台算法_打擂台算法流程图-CSDN博客
sum=sum+n*1.0/i;与 sum=sum+n*1/i;为什么输出结果不一样? - 知乎 (zhihu.com)
C语言中printf输出特殊字符(“%d“或者“\n“)_c语言中d%\n是什么意思-CSDN博客
在C语言中,printf("max is %d\n",max)和printf("%d",max)有区别吗?_百度知道 (baidu.com)

C语言中输出格式%.2f和%1.2f有什么不同? - 知乎 (zhihu.com)

c语言printf()函数中的%5.2f是什么意思?_百度知道 (baidu.com)


http://www.ppmy.cn/news/1294971.html

相关文章

程序语言相关知识——偏向Eigen矩阵

1 查看 Eigen库表示的矩阵 方法 1.1 列矩阵x在监视中&#xff0c;这样查看&#xff0c;数值右侧的圈圈 可用于更新数值 随程序 1.2 比较全的方法&#xff1a;来自于知乎&#xff1a;https://zhuanlan.zhihu.com/p/625334009?utm_id0 1.3 eigen的用法&#xff1a;https://ww…

并发(8)

目录 46.Thread.sleep(),Object.wait(),Condition.await(),LockSupport.part()的区别&#xff1f; 47.如果在wait&#xff08;&#xff09;之前执行了notify&#xff08;&#xff09;会怎样&#xff1f; 48.如果在park()之前执行了unpark()会怎样&#xff1f; 49.什么是AQS&…

ubuntu 卸载桌面

要卸载Ubuntu上的桌面环境&#xff0c;您可以按照以下步骤进行操作&#xff1a; 登录到您的Ubuntu系统&#xff0c;并打开终端。 确认您当前正在使用的桌面环境。可以运行以下命令来查看已安装的桌面环境&#xff1a; s /usr/share/xsessions/ 根据您当前使用的桌面环境&…

uniapp中uview组件库CircleProgress 圆形进度条丰富的使用方法

目录 #内部实现 #平台差异说明 #基本使用 #设置圆环的动画时间 #API #Props 展示操作或任务的当前进度&#xff0c;比如上传文件&#xff0c;是一个圆形的进度环。 #内部实现 组件内部通过canvas实现&#xff0c;有更好的性能和通用性。 #平台差异说明 AppH5微信小程…

OS_lab——保护模式之GDT、 Descriptor、Selector、GDTR 及其之间关系

1. 保护模式的相关数据结构 保护模式必要的数据结构定义 • GDT&#xff1a;即为 Global Descriptor Table&#xff08;全局描述符表&#xff09;&#xff0c;又称段描述符表&#xff0c; 为保护模式下的一个数据结构。其中包含多个 descriptor&#xff0c;定义了段的起始地…

Java中的List: 理解与实践

在Java编程语言中&#xff0c;List是一种被广泛使用的集合类型&#xff0c;它提供了一种灵活的方式来存储和操作有序的元素序列。List是Java集合框架&#xff08;Java Collections Framework&#xff09;的一部分&#xff0c;是一个接口&#xff0c;提供了一系列标准的方法来对…

阿里云系统盘测评ESSD、SSD和高效云盘IOPS、吞吐量性能参数表

阿里云服务器系统盘或数据盘支持多种云盘类型&#xff0c;如高效云盘、ESSD Entry云盘、SSD云盘、ESSD云盘、ESSD PL-X云盘及ESSD AutoPL云盘等&#xff0c;阿里云百科aliyunbaike.com详细介绍不同云盘说明及单盘容量、最大/最小IOPS、最大/最小吞吐量、单路随机写平均时延等性…

原型和原型链剖析

原型 每一个函数都有一个属性&#xff0c;这个属性名就叫做prototype prototype的属性值是一个对象 原型它就是函数的一个prototype属性 这个函数的prototype属性里面有什么&#xff0c;它可以干什么 默认的prototype对象里面有一个constructor属性&#xff0c;这个constructor…