C语言之数组

数组(Array)定义是一组具有相同类型的变量的集合。例如,应用数组可以将10个成绩值存储在内存的一个连续的区域中,使用一个统一的名字来标识这组相同类型的数据,这个名字称为数组名。构成数组的每个数据项称为数组元素。C程序通过数组的下标实现对数组元素的访问。

注意

      1. C语言中数组的下标都是从0开始的。

如a[5]数组的下标值为0到4,而不是1到5,其中第一个元素的下标值为0,最后一个元素的下标值为4。

     2. 在定义数组时必须使用常量定义数组的大小。如 int  a[i];这种定义方式就是非法的。

     3. 在解决实际问题的过程中,定义数组元素个数时,最好定义元素个数稍微多余题目中给定元素个数,避免在写程序的过程中发生越界这种情况。

数组分为一维数组,二维数组还有多维数组。

     1.一维数组 是用一个下标确各元素在数组的顺序,可用排成一行的元素来表示。

定义格式 :

             类型      数组名[元素个数];

     2. 二维数组用两个下标确定各元素在数组中的顺序,可用排列成i行j列的元素表示。第一维的长度代表数组每一列的元素的个数,第二维的长度代表数组每一行的元素个数。

定义格式:

       类型     数组名[第一维长度][第二维长度]

注意,数组第二维的长度声明永远都不能省略。

 

 

这周做过的一些题

1.校门外的树

总时间限制: 1000ms 内存限制: 65536kB

描述

某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米。我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置;数轴上的每个整数点,即0,1,2,……,L,都种有一棵树。

 

由于马路上有一些区域要用来建地铁。这些区域用它们在数轴上的起始点和终止点表示。已知任一区域的起始点和终止点的坐标都是整数,区域之间可能有重合的部分。现在要把这些区域中的树(包括区域端点处的两棵树)移走。你的任务是计算将这些树都移走后,马路上还有多少棵树。

 

输入

第一行有两个整数L(1 <= L <= 10000)和 M(1 <= M <= 100),L代表马路的长度,M代表区域的数目,L和M之间用一个空格隔开。接下来的M行每行包含两个不同的整数,用一个空格隔开,表示一个区域的起始点和终止点的坐标。

 

对于20%的数据,区域之间没有重合的部分;

对于其它的数据,区域之间有重合的情况。

输出

包括一行,这一行只包含一个整数,表示马路上剩余的树的数目。

样例输入

500 3

150 300

100 200

470 471

样例输出

298

 

 

ac代码

#include <iostream>

using namespace std;

int a[10001];

int main() 

{

int n, m, q, j;

 

cin >> n >> m;

for (int i=0; i<m; i++)

{

cin >> q >> j;

while (q <= j) 

a[q++] = 1;

}

 

int s = 0;

for (int i=0; i<=n; i++)

{

s += (a[i] == 0); 

}

cout << s << endl;

 

return 0;

}

 

2.石头剪刀布

总时间限制: 1000ms 内存限制: 65536kB

描述

石头剪刀布是常见的猜拳游戏。石头胜剪刀,剪刀胜布,布胜石头。如果两个人出拳一样,则不分胜负。

一天,小A和小B正好在玩石头剪刀布。已知他们的出拳都是有周期性规律的,比如:“石头-布-石头-剪刀-石头-布-石头-剪刀……”,就是以“石头-布-石头-剪刀”为周期不断循环的。请问,小A和小B比了N轮之后,谁赢的轮数多?

输入

输入包含三行。

第一行包含三个整数:N,NA,NB,分别表示比了N轮,小A出拳的周期长度,小B出拳的周期长度。0 < N,NA,NB < 100。

第二行包含NA个整数,表示小A出拳的规律。

第三行包含NB个整数,表示小B出拳的规律。

其中,0表示“石头”,2表示“剪刀”,5表示“布”。相邻两个整数之间用单个空格隔开。

输出

输出一行,如果小A赢的轮数多,输出A;如果小B赢的轮数多,输出B;如果两人打平,输出draw。

样例输入

10 3 4

0 2 5

0 5 0 2

样例输出

A

 

 

 

AC代码

#include<iostream>

using namespace std;

 

int main()

{

    int n,a,b,l[101],o[101],p=0,q=0,m=0,y=0;

cin>>n>>a>>b;

for(int i=1;i<=a;i++)

cin>>l[i];

for(int i=1;i<=b;i++)

cin>>o[i];

for(int i=1;i<=n;i++)

{

p++,q++;

if(p>a) p=1;

if(q>b) q=1;

if(l[p]==0&&o[q]==2) m++;

if(l[p]==0&&o[q]==5) y++;

if(l[p]==2&&o[q]==5) m++;

if(l[p]==2&&o[q]==0) y++;

if(l[p]==5&&o[q]==0) m++;

if(l[p]==5&&o[q]==2) y++;

}

if(m>y) cout<<"A"<<endl;

if(m<y) cout<<"B"<<endl;

if(m==y) cout<<"draw"<<endl;

return 0;

}

 

二维数组也有一些应用,主要和矩阵有关。

3.矩阵交换行

总时间限制: 1000ms 内存限制: 65536kB

描述

给定一个5*5的矩阵(数学上,一个r×c的矩阵是一个由r行c列元素排列成的矩形阵列),将第n行和第m行交换,输出交换后的结果。

 

输入

输入共6行,前5行为矩阵的每一行元素,元素与元素之间以一个空格分开。

第6行包含两个整数m、n,以一个空格分开。(1 <= m,n <= 5)

输出

输出交换之后的矩阵,矩阵的每一行元素占一行,元素之间以一个空格分开。

样例输入

1 2 2 1 2

5 6 7 8 3

9 3 0 5 3

7 2 1 4 6

3 0 8 2 4

1 5

样例输出

3 0 8 2 4

5 6 7 8 3

9 3 0 5 3

7 2 1 4 6

1 2 2 1 2

 

 

AC代码

#include<iostream>

using namespace std;

int main()

{

    int i,j,m,n,a[6][6],b[6][6];

    for(i=1;i<=5;i++)

    {

        for(j=1;j<=5;j++)

            cin>>a[i][j];

    }

    cin>>m>>n;

    for(j=1;j<=5;j++)

    {

        b[m][j]=a[m][j];

        a[m][j]=a[n][j];

        a[n][j]=b[m][j];

    }

 

    for(i=1;i<=5;i++)

    {

        for(j=1;j<=5;j++)

            cout<<a[i][j]<<" ";

        cout<<endl;

    }

}

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值