第三次总结数组

第三次学习总结之数组
1、数组顾名思义是类似数学上的数列,一种类型数组可以包含这种类型的元素,数组的使用避免了重复定义同种类型的变量,数组还有很多限制,数组有数组所能容纳的量及数组长度,所以就要按照需要来定义数组的大小,一般为了防止数组越界都会定的稍大一些,一旦数组越界了就会使数组停止运作。运用数组可以解决很多问题。
(1)运用数组来进行排序
冒泡排序:
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n-i;j++)
if(a[i]>a[j])t=a[i],a[i]=a[j],a[j]=t;
}
选择排序:
for(int i =1;i<=n;i++)
{l=i
for(int j=1;j<n;j++)
if(a[l]<a[j])
l=i;if(l!=i)
交换a【l】与a【j】
其实就是在数组里选择一个最大的值然后与最后一个元素交换。

函数排序
sort函数
头文件algorithm
sort<数组名,数组大小>
还可以自己定义函数来让sort函数到底是升序排序还是降序排序

(2)既然涉及数组了不得不提一下字符串
char a【】这个字符数组只能包含一个字符
string字符串头文件

字符串的赋值
string str1=“字符串”
string str1(“字符串”)
str1.assign(str0,从开始的位,串的长度)
str1.assign(“字符串”,多长)
str1.assign(几个,“字符”)

字符串交换
swap语句
str1.swap(str2)

字符串增加
s+=str1
append增加跟assign差不多方式来增加字符串到容器里面去

等还有很多对字符串操作的语句
插入、删除、替换、字符串存取、字符串查找等

2、学习中遇到的麻烦
oj上遇到了一个很麻烦的题写了很多还是发现无法包括所有情况,于是在csdn上请教了大牛
种树题

#include
using namespace std;
int main()
{
int l,m,dvd,vcd;
int x=0;
long a[10010];
for(int v=0;v<=10010;v++)
a[v]=0;
cin>>l>>m;
for(int i=1;i<=m;i++)
{
cin>>dvd>>vcd;
for(int j=dvd;j<=vcd;j++)
{
a[j]=1;
}
}
for(int k=0;k<=l;k++)
{
if(a[k]==0)
x++;
}
if(l>0&&m>0)
cout<<x;
return 0;
}
这个题运用了一个巧妙的方法类似于暴力差不多,跟上课讲的那个服务员开门的那个题有相似之处。

一维数组与二维数组同时使用
oj上反反复复
#include
#include
using namespace std;
int main()
{
char a[1100][1100];
char b[1100];
int s,y;
int n;
y=0;
cin>>n;
scanf("%s",b);
s=strlen(b);
s=s/n;
for(int i=0;i<s;i++)
{
if(i%2==0)
{
for(int j=0;j<n;j++)
{
a[i][j]=b[y];
y++;
}
}
else
{
for(int j=n-1;j>=0;j–)
{
a[i][j]=b[y];
y++;
}
}
}
for(int i=0;i<n;i++)
{
for(int j=0;j<s;j++)
cout<<a[j][i];
}
}
3、学习收获
学完了数组,不难发现以前的复杂题可以用数组简单做出来,比如说输出最大值或者是某个规定的项,以及其他的解决不了的比如说排序的问题。
还有就是学到了查找元素时
折半查找
while(low<=high)
{mid=(low+high)/2;
if(a[mid]>temp)
high=mid-1;
else
if(a[mid]<temp)
low=mid+1;
这种操作可以防止超时,减少运算步骤。
还有就是要将多个二维数组或者一维二维结合起来运用可以解决很多问题。
关于递推的思想,斐波那契数列f【n】=f【n-1】+f【n-2】上楼梯问题,生兔子问题。
学习了函数的入门知识,函数与数组一起使用更高效,由于只是知道点函数的皮毛,不便于进行展示了。临近期末了,需要拿出时间来看看以前做的题,再继续做一些新的题巩固一下。

猜你喜欢

转载自blog.csdn.net/ProgreamA/article/details/85220175