- 帅泓宇 的博客
P0004题解
- @ 2026-2-28 12:18:41
前置:基础语法
最低所需知识点:排序 文件读写
首先是排序 我们都知道排序有很多种算法 例如:冒泡 插入 选择 归并......
但是在本题中排序并不是重点 排序将在排序模板题中进行讲解
我们就先进行基础的了解
首先定义一个数组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类型!第二 三个参数不可修改!
至于恢复输入输出......我想现在还不是时候
------------------------------------------------------------题解结束------------------------------------------------------------