P0004

前置:基础语法

最低所需知识点:排序 文件读写

首先是排序 我们都知道排序有很多种算法 例如:冒泡 插入 选择 归并......

但是在本题中排序并不是重点 排序将在排序模板题中进行讲解

我们就先进行基础的了解

首先定义一个数组a 它的长度为10 类型为int

int a[10];

当然 现在它里面的数值还没有赋值 可能为任意一个数值

那么我们如何赋值数组里面的数呢?

通过下标我们可以访问到数的地址从而更改此数的值 当然 讲解不如直接观察代码自己找规律

a[0]=1;

上面的代码实现了将a的第一个数更改为1的功能

注意:数组下标从0开始 你必须熟记这一点

当然 为了避免访问越界导致的RTE(运行时错误)我们可以将数组开的更大

例如 题目的n最大为100 我们开110 这样可以保证不会RTE(在访问下标100时)

但是我更喜欢直接用题目给的n定义数组

int n;
cin>>n;
int a[n];

这样 我们就可以定义一个数组长度为n的数组了 空间一点不浪费!

但是在后续的前缀和等算法中此做法有诸多不便......

所以我们需要稍加修改 改为

a[n+1];

这样在后续的算法中也不会有太大的问题

当然 这只是我个人的习惯 为了避免某些本可以避免的问题 建议使用第一种方法

学会了数组 你才有资格来学习如何排序

我们做此题只需要学习一个函数 相信我 很短 短的离谱

这个函数让我们实现了最优的时间复杂度和最简的代码 当然 其他排序算法也不是废物 只是现在我们只学这个

这个函数就是sort

它的格式是

int a[10];
sort(a,a+10);

上面代码的含义是定义一个长度为10的数组 并对其排序

注意:括号内可以有第三个参数 但本题不需要学习 所以跳过

当然这里面的参数都不是固定的一个数

你可以不用从头开始 而是从第二个开始排序

sort(a+1,a+10);

你也可以不排序到结尾 而是只排序到第九个

sort(a,a+9);

这两种情况也可以同时存在

此函数默认是从小到大排序

此函数的时间复杂度为n*log(n)

我们可以使用for循环来遍历一个数组 格式如下

for(int i=0;i<10;i++){
  a[i]=0;
}

这样我们就可以遍历a数组并将所有的值改为0了!

当然 定义的变量不一定要是i 这只是个名字!

循环内部也可以不止一行代码哦~

接下来是令此题难度上升到8(2026.2.28)的主要原因:文件读写

首先是读入更改 C++默认是控制台(运行C++后弹出的窗口)读入

标准格式为

freopen("sort.in","r",stdin);

它可以让你的程序从本地一个叫sort.in的文件内读入输入

其次是输出

freopen("sort.out","w",stdout);

它可以让你的程序将输出保存到本地一个叫sort.out的文件内

注意:如果本地没有叫sort.out的文件 会自动创建并保存输出

注意:这两个函数的前两个参数必须为string类型!第二 三个参数不可修改!

至于恢复输入输出......我想现在还不是时候

------------------------------------------------------------题解结束------------------------------------------------------------