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


高清播放
赞赏支持

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

 

例题:

输入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,请将每个不同的数从小到大输出并且输出它...

登录查看完整内容


课后作业

掌握数组使用技巧


登录后开始许愿

3 条上岸许愿
六六六
2026年2月27日 10:47

第一题的代码是不是有问题啊,为什么我运行之后输入后有问题

 

赞(0)
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";
    }
}

赞(1)

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

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

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

赞(3)

龙龙 回复 lyh: int main() { int n, x; int f[105] = { 0 }; int p[105] = { 0 };//p[i]表示有i个这样的数的最大值是多少 scanf("%d", &n); for (int i = 0; i < n; i++) { scanf("%d", &x); f[x]++; } for (int i = 0; i <= 100; i++) { p[f[i]] = i; f[i] = 0; } for (int i = 0; i <= 100; i++) f[p[i]] = i; for (int i = 1; i <= 100; i++) { if (f[i] > 0) printf("%d %d\n",i, f[i]); } return 0; }

2026年2月24日 20:55