数组的概念:
按顺序排列的一组同种类型的数据构成的集合。
注:一个数组在内存中占一片连续的存储单元
一、一维数组
1.数据类型 数组名[整数1][整数2]……[整数n]
int a[5];
注:数组大小必须是值为正的常量,不能为变量。
一旦定义不能改变大小,数组大小最好用宏来定义
以应变未知的可能变化。
2.int days[12]={31,28,31,30,31,30,31,31,30,31,30,31}
注:数组定义后的初值仍然是随机数,一般需要我们来初始化。
int a[5]={12,34,56,78,9}
3.数组名[下标]
区数组下标(index)都是从开始
使用a[0]、 a[1]、 a[2]、 a[3]、a[4]这样的形式访
问每个元素
下标既可是常量, 也可是整型表达式,允许快速
随机访问,如a[i]
可以像使用普通变量一样使用它们
4.下标越界是大忌!
编译程序不检查是否越界
下标越界,将访问数组以外的空间
那里的数据是未知的,不受我们掌控,可能带来严重后果
例:
03:寻找配对数
查看 提交 统计 提问
总时间限制: 1000ms 内存限制: 65536kB
描述
在给定的n个互不相等的正整数中,寻找可以形成a*b=c的等式(a,b,c互不相等)的数目。比如在12,32,6,1,2,8,4中,只有2*4=8, 2*6=12, 4*8=32三对。
注意:给出的正整数互不相同。正整数的最大值为2^32-1,正整数的最大个数为1000.
输入
第一行输入总共的正整数数目n(n<=1000)
接下来的一行输入n个正整数,正整数之间用一个空格隔开。
输出
输出其中满足a*b=c等式的数目。
样例输入
7
8 6 3 4 10 5 2
样例输出
3
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
int n,i,j,k,l,m=0;
int a[1001];
cin>>n;
for(i=1;i<=n;i++)
cin>>a[i];
for(j=1;j<=n;j++)
for(k=j+1;k<=n;k++)
for(l=k+1;l<=n;l++)
if(a[j]*a[k]==a[l]||a[j]*a[l]==a[k]||a[l]*a[k]==a[j])
m++;
cout<<m;
return 0;
}
二、二维数组
数据类型 数组名[第一维长度][第二维长度];
其他基本同一维数组。
三、排序查找
1.选择排序
main()
{
int a[100000];
int i,j,max,l;
cin>>n;
for(i=0;i<n;i++) cin>> a[i];
for(j=0;j<n-1j++)
{ l=j;
for(i=1;i<n;++)
if(a[]<a[i)
|=l;
if(!=j)i=a[l,a[]=a[j],a[j]=i;
}
return 0;
}
2.插入排序
void insSor(int *a,int num)
{
for(i=1;i<num;i++)
{
|= i-1;temp=a[i];
while(l>=O&&a[]>temp)
a[l+1]=a[];
1-;
a[l+1]=temp;
3.冒泡排序
#include<iostream>#include <iomanip>using namespace std;const int n=10;int t,a[n+1];int main()
//定义数组
for (int i=1; i<=n; ++i) cin>>a[i];
for (int j=1; j<=n-1; ++j) //冒 泡法排序for (int i=1;i<=n-j; ++i) //两两相比较
if (a[j]<a[i+1]) //比较与交换{t=a[i]; a[j=a[i+1]; a[i+1]=t;}for (int i=1; i<=n; ++i)
cout<<setw(5)<<a[i};cout<<end;return 0;
//输入十个数
//输出排序后的十个数
运行结果:
输入: 2586 1234652216 55
输出: 6555342216128 652
4.折半查找
low=0,high=n-1 ,mid=o;
while(low<=high)
{
mid=(low+high)/2;
if(a[mid]>temp)
high=mid-1;
else if(almid]<temp)
low=mid+1;
else
couture<<a[mid]<<endl;
}
cout<<"Not Found!" <<endl;
}
四、数组的题目要求要有清晰的思路,
要搞清每个变量代表的含义,弄清每
一个嵌套循环是在哪一个条件下执行。
不能弄错下标!!