目录
一维数组初步
概念:
一维数组是一组相同类型的元素按顺序排列的集合。每个元素在数组中都有一个固定的位置,称为 “索引”或“下标”。
数组允许在单个变量名下存储多个值,方便批量处理数据。
数组的定义
定义方式:
数据类型 数组名[数组大小];
例如:int numbers[5]; //定义了一个包含5个整数元素的数组。
关键点:
数组大小:数组的大小在定义时必须是一个常量,表示数组可以存储的元素个数。
下标:数组的下标从0开始,第一个元素的下标是0,最后一个元素的下标是(数组大小 - 1)。
数组的赋值
赋值方式:
逐个赋值:可以通过下标为数组的每个元素逐个赋值。
数组名[索引] = 值;
例如:numbers[0] = 10;// 给数组numbers的第一个元素赋值为10。
初始化赋值:可以在定义数组时同时进行初始化赋值。
数据类型 数组名[数组大小] = {值1, 值2, ...};
例如:int numbers[5] = {1, 2, 3, 4, 5}; //定义并初始化一个数组。
默认初始化:如果在定义时没有显式赋值,数组中的元素会自动初始化为0(对整数数组)或空字符(对字符数组)。
关键点:
访问元素:通过下标访问数组中的每个元素,例如numbers[2]访问数组中的第三个元素。
数组遍历:通常使用循环来遍历数组的所有元素,例如用for循环从0遍历到(数组大小 - 1)。
代码
一维数组输入输出。
#include<bits/stdc++.h>
using namespace std;
int arr[1000000];
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>arr[i];
}
for(int i=1;i<=n;i++){
cout<<arr[i]<<' ';
}
return 0;
}
例题:区间求和
描述:输入一个总数n (1<=n<=100) ,输入n个数字,接下来输入问题总数m,接下来的m行,每行两个数x 和 y,代表询问第x个数到 第y个数的和是多少?
用例输入: 用例输出:8 10 1 2 7 0 8 2 4 5 17 3 19 1 3 2 5 5 8
#include<bits/stdc++.h>
using namespace std;
int a[300];
int main() {
int n,m;
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
cin>>m;
while(m--){
int sum=0;
int x,y;
cin>>x>>y;
for(int i=x;i<=y;i++){
sum+=a[i];
}
cout<<sum<<endl;
}
return 0;
}
一维数组进阶
数组元素求和
概念:
数组元素求和是将数组中所有元素的值相加,得到一个总和。
例如,给定数组[2, 4, 6, 8],求和结果是2 + 4 + 6 + 8 = 20。
关键点:
数组基础:
数组是一个存储相同类型数据的集合,通过索引来访问每个元素。
索引从0开始,第一个元素的索引是0,第二个元素的索引是1,依此类推。
遍历数组:
使用循环(如for循环)遍历数组的每个元素。
在遍历过程中,将每个元素的值累加到一个总和变量中。
初始化总和变量:
在开始遍历数组之前,确保总和变量初始化为0。
统计数组的元素个数
概念:
统计数组的元素个数是计算数组中有多少个元素。
关键点:
数组长度:数组的长度是数组中元素的个数。
对于已知长度的数组,可以直接使用该长度。
对于动态数组或指针数组,可以使用循环或特殊函数来计算元素个数。
遍历统计:
使用循环遍历数组,记录每次循环的次数,即为元素个数。
数组与淘汰机制求最值
概念:
求最值是指在数组中找到最大值或最小值。
淘汰机制是一种逐步比较和更新的策略,用来筛选出数组中的最值。
关键点:
初始化最值变量:
将第一个元素作为初始最值,然后逐步与其他元素比较。
逐步比较与更新:
使用循环遍历数组的每个元素,与当前记录的最值进行比较。
如果找到更大的或更小的值,则更新最值变量。
淘汰机制:
每次找到更优的值时,淘汰掉之前的最值,确保最终的最值变量存储的是整个数组中的最大或最小值。
代码
数组元素求和代码
#include<bits/stdc++.h>
using namespace std;
int arr[1000000];
int main(){
int n,sum=0;
cin>>n;
for(int i=1;i<=n;i++){
cin>>arr[i];
sum+=arr[i];
}
cout<<sum<<endl;
for(int i=1;i<=n;i++){
cout<<arr[i]<<' ';
}
return 0;
}
统计某一元素代码
#include<bits/stdc++.h>
using namespace std;
int arr[1000000];
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>arr[i];
}
int m,cnt=0;
cin>>m;
for(int i=1;i<=n;i++){
if(arr[i]==m){
cnt++;
}
}
cout<<cnt;
return 0;
}
统计每个元素代码
#include<bits/stdc++.h>
using namespace std;
int arr[1000000];
int main() {
int n;
cin>>n;
for(int i=1;i<=n;i++){
int m;
cin>>m;
arr[m]++;
}
for(int i=1;i<=15;i++){
if(arr[i]!=0){
printf("%d %d\n",i,arr[i]);
}
}
return 0;
}
例题:求n个数的最大值和最小值
描述:任意输入n个整数,把它们的最大值,最小值求出来.
输入描述:输入2行,包括一个整数n(1<=n<=20),第2行n个数,每个数的范围在0到32767之间。
输出描述:输出只有一行,包括2个整数,用一个空格隔开。
用例输入: 用例输出:5 99 0 1 99 3 6 0
#include<bits/stdc++.h>
using namespace std;
int arr[300];
int main(){
int n,maxx=INT_MIN,minn=INT_MAX;
cin>>n;
for(int i=1;i<=n;i++) cin>>arr[i];
for(int i=1;i<=n;i++){
if(arr[i]>maxx) maxx=arr[i];
if(arr[i]<minn) minn=arr[i];
}
cout<<maxx<<' '<<minn;
return 0;
}