数组除了可以存储数据以外,还可以用来进行标记。
例题:
输入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,请将每个不同的数从小到大输出并且输出它...
掌握数组使用技巧
登录后开始许愿
存储地图
#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";
}
}
最后一道例题题解写错了,最后要按照数字的大小排序而不是出现次数排序。