菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
60
0

数组

原创
05/13 14:22
阅读数 78089

数组1:一维数组的输入输出 (10 分):

1.逆序遍历即可。

 数组2:输出能被3或7整除的数 (20 分):

1.遍历数组,并判断是否可以被3或7整除。

 数组3:找最大元素及其下标 (40 分):

1.用一个max记录最大值,maxi记录最大值下标

2.用a[0]为max赋初值,0为maxi赋初值。

3.遍历数组,不断更新max和maxi。

4.遍历完输出即可。

数组4:求一组数的平均值及高于平均值的个数 (30 分):

1.读入n后,循环读入n个整数,并用sum总和。

2.读入完后,计算平均值。

3.遍历数组,记录下大于平均值的数字个数,输出即可。

数组5:求相邻三个数之和的最小数 (60 分):

1.读入后,遍历从i=2不断更新相邻三个数和的最小值。

2.特殊判断最后两个数与第一个数以及最后一个数与最前面的两个数和的最小值是否需要更新。

3.输出记录下的最小和即可。

数组6:选择排序 (30 分):

1.模板题背过即可。

2.思路与打扑克时排列手牌的方法类似。我们需要将排一张张抽出,分别插入到前面已经排序好的手牌中的适当操作,直到插入最后一张牌以后。

3.从1遍历到n-1,每次循环用v保存当前的下标的数组元素数值,在用一重循环不断将大于v的数组元素往后移,给v腾位置插入。

4.在找到的合适位置的赋上v的值即可;

PS:我看错题了,写成了插入排序。。。选择排序晚点补上,插入排序写都写了就不删了。

1.在未排序序列中找到最小的元素

2.存放到排序序列的起始位置

3.再从剩余未排序元素中继续寻找最小的元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

 

数组7:二维数组的输入输出 (30 分):

1.定义二维数组,用两重for循环为每个位置赋上初值。

2.再用两重for循环输出左下角的元素。(两个操作可以合并在一起解决,有兴趣可以试试看)

数组8:对角线之和1 (40 分):

1.定义二维数组,两重for循环读入

2.遍历二维数组,根据题意将主对角线上和副对角线上的元素求和后输出。(一样可以合并在一起解决)

数组9:矩阵转置1 (40 分):

1.定义二维数组,两重for循环读入

2.然后颠倒行列下标遍历存入第二个矩阵后遍历输出。

数组10:二维数组最小数的位置 (50 分):

1.读入数组。

2.遍历数组,用min记录最小值,用maxi和maxj记录最小值的下标,不断利用min更新maxi和maxj。

3.输出maxi和minj即可。

 

数组11:一维数组的插入(有序数组插入,使之仍然有序1) (40 分):

1.读入数组和待插入数

2.遍历数组找到第一个大于这个数字的下标,将后序数组均后移一位,然后在该位置插入即可。

数组12:循环移位 (30 分)

1.读入数组

2.用第二个数组存入移位后的数组或者直接在原数组上循环移位均可

数组13:找最大数和次大数 (50 分):

1.先读入a[0]和a[1],然后用a[0]和a[1]为最大值和次大值赋上初值,判断一下次大值有没有大于最大值,如果有交换一下。

2.接着不断读入剩下的数字,如果该数字大于最大值则同时更新最大值和次大值,大于次大值则更新次大值

3.输出最大值次大值

数组14:分离整数各位 (50 分):

1.挨个读入一个字符,如果是数字就输出。或者以字符串读入,遍历字符串输出数字。

2.或者直接读入数字,如果是负数就乘上一个-1,然后逆序分解用cnt记录下标,分解一次存入一次,cnt++一次,最后逆序输出即可。

数组15:杨辉三角形 (60 分):

1.为a[0]赋上初值1。

2.利用杨辉三角的性质用上一层的相邻两个数字的和更新下一层的数字。

3.更新完一层输出一层。

数组16:插入元素使数组仍然有序2 (50 分)

1.读入n和数组以及x。

2.从前往后遍历数组,如果a[i]>x那就把a[i]和a[i]以后的所有数往后挪一位,往后挪需要最后一位开始依次挪,再让a[i]=x即可。如果到最后一位了还是没有找到a[i]>x,那就让a[n] = x即可。

3.遍历输出即可。

数组18:冒泡排序 (40 分)

1.读入数组

2.遍历数组,如果发现a[i]>a[i+1],那就做交换。

3.如果在某次遍历完数组后没有发生一次交换,就停止排序。

4.遍历输出即可。

数组19:查找元素X(1) (40 分)

1.读入数组,读入x。

2.用一个flag记录输出元素的个数,第一次找到输出下标,break,flag++。

3.如果flag==0成立输出No。

 

数组20:查找元素X(2) (50 分)

 

1.读入数组,读入x。

 

2.用一个flag记录输出元素的个数,找到一次输出一次下标,flag++。

 

3.如果flag==0成立输出No。

 数组21:找鞍点 (50 分)

1. 读入数组。

2.找一下每一行的最大值,再判断这个最大值是不是还是这一列的最小值,如果是就输出,记得下标是从0开始的,题目行列都是从1开始的,需要加上1对齐,如果遍历完了还是没有就输出no。

数组22:查找并删除 (50 分)

1.读入数组和x

2.遍历数组,如果找到了,把那个元素后面的所有元素往前挪一位,然后输出剩下的,如果没找到no。

数组23:Fabonacci数列(要求用数组写) (10 分)

1.给a[1]和a[2]赋上初值1。(a[0]不去用,数列的第n项在数组里就用a[n]存,这样后面输出的时候会方便一点)

2.从第3项开始,利用性质a[n] = a[n-1] + a[n-2]更新a[n]。

3.用for循环从a[1]输出到a[20],输出完数组元素后,判断i%4 == 0 如果为真,就输出一个回车。

 

7-106 数组24:折半查找 (50 分):

1.二分查找也称折半查找,老师上课给模板比较常规,通常有两种常用写法,主要差别在于如何更新l和r。下面两种写法的代码我都放一下,模板题背过即可。第二种写法更新mid时不加上+1会死循环。

 

1 int l = 0 , r = n - 1;
2     while(l < r)
3     {
4         int mid = (l + r) >> 1; 
5         if(a[mid] >= x) r = mid ;
6         else l = mid + 1;
7     }
8     if(a[r] == x)printf("%d\n",r);
9     else printf("no\n");

 

1 int l = 0 , r = n - 1;
2     while(l < r)
3     {
4         int mid = (l + r + 1) >> 1; 
5         if(a[mid] <= x) l = mid ;
6         else r = mid - 1;
7     }
8     if(a[r] == x)printf("%d\n",r);
9     else printf("no\n");

 

 

 

发表评论

0/200
60 点赞
0 评论
收藏