数组使用技巧
标签: 数组使用技巧
学习人数: 26.1k


高清播放
赞赏支持

数组除了可以存储数据以外,还可以用来进行标记。

 

例题:

输入N(N<=100)个数,每个数的范围> 0 并且 <= 100,请将每个不同的数从小到大输出并且输出它对应的个数。

样例输入

8

3 2 2 1 1 4 5 5

样例输出

1 2

2 2

3 1

4 1

5 2

 

代码如下

#include <bits/stdc++.h>

using namespace std;



int f[105]={0};//注意,尽量将数组开在全局

int main() {

    int n,x;

    scanf("%d", &n);

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

        scanf("%d", &x);

        f[x]++;

    }

    for (int i = 0; i <= 100; i++) {

        if (f[i] > 0) printf("%d %d\n", i, f[i]);

    }

    return 0;

}

在这个程序中,我们使用一个数组f记录每个值得个数,f[i]的值表示i这个数有多少个,初始的时候每个值的个数都是0。

 

数组的使用不一定从0开始,可以从任意下标开始,只要我们使用的时候对应上就行。

 

例如我们存储地图的时候

####

#.##

##@#

####

 

假设一个地图是这样的,我们要用二维字符数组来存储,我们可以像下面这样做。

#include <bits/stdc++.h>

using namespace std;



char mpt[10][10];

int main() {

    for (int i = 1; i <= 4; i++) {

        scanf("%s", mpt[i] + 1);

        /* 不要用下面这种输入方式,否则会出问题,因为回车也算一个char字符

        for (int j = 1; j <= 4; j++) {

            scanf("%c", &mpt[i][j]);

        }

        */

    }

    for (int i = 1; i <= 4; i++) {

        for (int j = 1; j <= 4; j++) {

            printf("%c", mpt[i][j]);

        }

        printf("\n");

    }

    return 0;

}

 

数组还可以嵌套使用

我们将上面那题改进一下

 

例题:

输入N(N<=100)个数,每个数的范围> 0 并且 <= 100,请将每个不同的数从小到大输出并且输出它...

登录查看完整内容


课后作业

掌握数组使用技巧


登录后开始许愿

2 条上岸许愿
FCC
2024年3月9日 21:19

存储地图

#include <bits/stdC++.h>
using namespace std;

char mpt[10][10];
int main(){
    for( int i=1; i <= 4; i++ ){
        for( int j=1; j <= 4; j++ ){
            cin >> mpt[i][j];
        }
    }
    for( int i=1; i <= 4; i++ ){
        for( int j=1; j <= 4; j++ ){
            cout << mpt[i][j] << "\t";
        }
        cout << "\n";
    }
}

赞(0)

FCC 回复 FCC: mpt[i] + 1 表示数组第i+1行第2个元素

2024年3月9日 22:53
lyh
2023年9月2日 22:46

最后一道例题题解写错了,最后要按照数字的大小排序而不是出现次数排序。

赞(1)